From 426065efee5e5e775dde403f7e7f7c78d002909a Mon Sep 17 00:00:00 2001 From: dieriba Date: Wed, 17 Sep 2025 18:48:37 +0200 Subject: [PATCH] fix: add ack deadline gcp (#6625) * update ref * add ack deadline * update ref --- ...bef428fc4f0d52776d7a5fca64f17225ef30.json} | 7 +++-- ...a2ee318c72b365c0fe0b9fbec886a461f5e4.json} | 7 +++-- backend/ee-repo-ref.txt | 2 +- ...4_add_ack_deadline_to_gcp_trigger.down.sql | 2 ++ ...504_add_ack_deadline_to_gcp_trigger.up.sql | 2 ++ backend/windmill-api/openapi.yaml | 6 ++++ backend/windmill-api/src/capture.rs | 2 ++ .../gcp/GcpTriggerEditorConfigSection.svelte | 2 ++ .../triggers/gcp/GcpTriggerEditorInner.svelte | 29 ++++++++++++++++++- .../src/lib/components/triggers/gcp/utils.ts | 1 + 10 files changed, 52 insertions(+), 8 deletions(-) rename backend/.sqlx/{query-1a9ba16c90d3d65c4ff39aaddb3079009e03af711e7f6b53332537cf4cb0e8dd.json => query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json} (83%) rename backend/.sqlx/{query-e619fa013528a6275f98e14ae1727c55b0d4f4a5e4ee87c29251042e2916f0a0.json => query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json} (67%) create mode 100644 backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.down.sql create mode 100644 backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.up.sql diff --git a/backend/.sqlx/query-1a9ba16c90d3d65c4ff39aaddb3079009e03af711e7f6b53332537cf4cb0e8dd.json b/backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json similarity index 83% rename from backend/.sqlx/query-1a9ba16c90d3d65c4ff39aaddb3079009e03af711e7f6b53332537cf4cb0e8dd.json rename to backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json index 141f92e271..dd40aabbc1 100644 --- a/backend/.sqlx/query-1a9ba16c90d3d65c4ff39aaddb3079009e03af711e7f6b53332537cf4cb0e8dd.json +++ b/backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE \n gcp_trigger \n SET \n gcp_resource_path = $1,\n subscription_id = $2,\n topic_id = $3,\n delivery_type = $4,\n delivery_config = $5,\n is_flow = $6, \n edited_by = $7, \n email = $8,\n script_path = $9,\n path = $10,\n enabled = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n auto_acknowledge_msg = $17\n WHERE \n workspace_id = $12 AND \n path = $13\n ", + "query": "\n UPDATE \n gcp_trigger \n SET \n gcp_resource_path = $1,\n subscription_id = $2,\n topic_id = $3,\n delivery_type = $4,\n delivery_config = $5,\n is_flow = $6, \n edited_by = $7, \n email = $8,\n script_path = $9,\n path = $10,\n enabled = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n auto_acknowledge_msg = $17,\n ack_deadline = $18\n WHERE \n workspace_id = $12 AND \n path = $13\n ", "describe": { "columns": [], "parameters": { @@ -31,10 +31,11 @@ "Varchar", "Jsonb", "Jsonb", - "Bool" + "Bool", + "Int4" ] }, "nullable": [] }, - "hash": "1a9ba16c90d3d65c4ff39aaddb3079009e03af711e7f6b53332537cf4cb0e8dd" + "hash": "17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30" } diff --git a/backend/.sqlx/query-e619fa013528a6275f98e14ae1727c55b0d4f4a5e4ee87c29251042e2916f0a0.json b/backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json similarity index 67% rename from backend/.sqlx/query-e619fa013528a6275f98e14ae1727c55b0d4f4a5e4ee87c29251042e2916f0a0.json rename to backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json index 2874c70c1c..6d41284328 100644 --- a/backend/.sqlx/query-e619fa013528a6275f98e14ae1727c55b0d4f4a5e4ee87c29251042e2916f0a0.json +++ b/backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO gcp_trigger (\n gcp_resource_path,\n subscription_id,\n topic_id,\n delivery_type,\n delivery_config,\n workspace_id, \n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry,\n auto_acknowledge_msg\n ) \n VALUES (\n $1, \n $2, \n $3, \n $4,\n $5,\n $6, \n $7, \n $8, \n $9,\n $10,\n $11,\n $12,\n $13,\n $14,\n $15,\n $16\n )", + "query": "\n INSERT INTO gcp_trigger (\n gcp_resource_path,\n subscription_id,\n topic_id,\n delivery_type,\n delivery_config,\n workspace_id, \n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry,\n auto_acknowledge_msg,\n ack_deadline\n ) \n VALUES (\n $1, \n $2, \n $3, \n $4,\n $5,\n $6, \n $7, \n $8, \n $9,\n $10,\n $11,\n $12,\n $13,\n $14,\n $15,\n $16,\n $17\n )", "describe": { "columns": [], "parameters": { @@ -30,10 +30,11 @@ "Varchar", "Jsonb", "Jsonb", - "Bool" + "Bool", + "Int4" ] }, "nullable": [] }, - "hash": "e619fa013528a6275f98e14ae1727c55b0d4f4a5e4ee87c29251042e2916f0a0" + "hash": "e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4" } diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index d9e0f1c4b1..8e99fde120 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -08f610ecc5486ad2568e0abd22405baa90a93481 +89ecae7db8c46cfc571eb58bcd7f4ba6f78e8aba \ No newline at end of file diff --git a/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.down.sql b/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.down.sql new file mode 100644 index 0000000000..144aab482d --- /dev/null +++ b/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE gcp_trigger DROP COLUMN ack_deadline; \ No newline at end of file diff --git a/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.up.sql b/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.up.sql new file mode 100644 index 0000000000..7a85bd7c82 --- /dev/null +++ b/backend/migrations/20250917172504_add_ack_deadline_to_gcp_trigger.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE gcp_trigger ADD COLUMN ack_deadline INTEGER; \ No newline at end of file diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 0e05dfbe9b..c385a78363 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -16818,6 +16818,12 @@ components: type: boolean auto_acknowledge_msg: type: boolean + ack_deadline: + type: integer + format: int32 + minimum: 10 + maximum: 600 + description: "Time in seconds within which the message must be acknowledged. If not provided, defaults to the subscription's acknowledgment deadline (600 seconds)." error_handler_path: type: string error_handler_args: diff --git a/backend/windmill-api/src/capture.rs b/backend/windmill-api/src/capture.rs index 603c040475..3283dea123 100644 --- a/backend/windmill-api/src/capture.rs +++ b/backend/windmill-api/src/capture.rs @@ -183,6 +183,7 @@ pub struct GcpTriggerConfig { pub create_update: Option, pub topic_id: String, pub auto_acknowledge_msg: Option, + pub ack_deadline: Option, } #[cfg(all(feature = "enterprise", feature = "nats", feature = "private"))] @@ -397,6 +398,7 @@ async fn set_gcp_trigger_config( gcp_config.create_update, false, capture_config.is_flow, + gcp_config.ack_deadline ) .await?; gcp_config.create_update = Some(config); diff --git a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte index 5b6f695f43..76858f79fb 100644 --- a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +++ b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte @@ -83,6 +83,7 @@ cloud_subscription_id?: string create_update_subscription_id?: string auto_acknowledge_msg: boolean + ack_deadline?: number } let { @@ -97,6 +98,7 @@ subscription_mode = $bindable('create_update'), base_endpoint = $bindable(getBaseUrl()), auto_acknowledge_msg = $bindable(true), + ack_deadline = $bindable(), path = '', showTestingBadge = false, cloud_subscription_id = $bindable(''), diff --git a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte index d6044e765a..edb2e2d644 100644 --- a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte @@ -55,6 +55,7 @@ let deploymentLoading = $state(false) let base_endpoint = $derived(`${window.location.origin}${base}`) let auto_acknowledge_msg = $state(true) + let ack_deadline: number | undefined = $state() let optionTabSelected: 'settings' | 'error_handler' | 'retries' = $state('error_handler') let errorHandlerSelected: ErrorHandler = $state('slack') let error_handler_path: string | undefined = $state() @@ -151,6 +152,7 @@ error_handler_args = defaultValues?.error_handler_args ?? {} retry = defaultValues?.retry ?? undefined auto_acknowledge_msg = defaultValues?.auto_acknowledge_msg ?? true + ack_deadline = defaultValues?.ack_deadline errorHandlerSelected = getHandlerType(error_handler_path ?? '') } finally { drawerLoading = false @@ -191,6 +193,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry auto_acknowledge_msg = cfg?.auto_acknowledge_msg ?? true + ack_deadline = cfg?.ack_deadline errorHandlerSelected = getHandlerType(error_handler_path ?? '') } @@ -230,7 +233,8 @@ error_handler_path, error_handler_args, retry, - auto_acknowledge_msg + auto_acknowledge_msg, + ack_deadline } } @@ -243,6 +247,7 @@ delivery_config, base_endpoint, auto_acknowledge_msg, + ack_deadline, topic_id, path } @@ -400,6 +405,7 @@ bind:topic_id bind:subscription_mode bind:auto_acknowledge_msg + bind:ack_deadline {path} cloud_subscription_id={subscription_id} create_update_subscription_id={subscription_id} @@ -439,6 +445,27 @@ {/if} + +
+ +
+
+ Leave empty to use subscription default (600 seconds). This affects how long + messages remain in flight before being redelivered. +
+
{:else}
No settings available for push delivery type diff --git a/frontend/src/lib/components/triggers/gcp/utils.ts b/frontend/src/lib/components/triggers/gcp/utils.ts index 684604260f..eb8430786f 100644 --- a/frontend/src/lib/components/triggers/gcp/utils.ts +++ b/frontend/src/lib/components/triggers/gcp/utils.ts @@ -31,6 +31,7 @@ export async function saveGcpTriggerFromCfg( enabled: cfg.enabled, is_flow: cfg.is_flow, auto_acknowledge_msg: cfg.auto_acknowledge_msg, + ack_deadline: cfg.ack_deadline, ...errorHandlerAndRetries } if (edit) {