From f1b8e7b549893839253a93ec08bd450b69d93719 Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Fri, 13 Nov 2026 09:01:53 +0000 Subject: [PATCH] Chart 1.7.0: default to native Server 3.9.0 --- k8s/helm/durable-workflow/Chart.yaml | 12 ++--- k8s/helm/durable-workflow/README.md | 2 +- k8s/helm/durable-workflow/docs/UPGRADING.md | 55 +++++++++++++++++++++ k8s/helm/durable-workflow/values.yaml | 2 +- resources/release/source-release.json | 4 +- 5 files changed, 65 insertions(+), 10 deletions(-) diff --git a/k8s/helm/durable-workflow/Chart.yaml b/k8s/helm/durable-workflow/Chart.yaml index 126468acb..efeadada6 100644 --- a/k8s/helm/durable-workflow/Chart.yaml +++ b/k8s/helm/durable-workflow/Chart.yaml @@ -5,11 +5,11 @@ type: application # The chart's own semver version. Bumped on every chart release; treated as # independent of the server image version (appVersion). Breaking-change rules # for this version live in docs/UPGRADING.md alongside the chart. -version: 1.6.0 +version: 1.7.0 # The immutable native Durable Workflow Server this chart release packages. # The onboarding default in values.yaml and appVersion are generated from the # checked-in source release record (helm_chart.app_version). -appVersion: "3.8.0" +appVersion: "3.9.0" kubeVersion: ">=1.27.0-0" home: https://durable-workflow.github.io/docs/2.0/deployment sources: @@ -30,14 +30,14 @@ annotations: # exact commit that most recently changed the packaged chart. org.opencontainers.image.source: https://github.com/durable-workflow/server dev.durable-workflow.source-revision: "unreleased" - dev.durable-workflow.image-reference: "docker.io/durableworkflow/server:3.8.0" + dev.durable-workflow.image-reference: "docker.io/durableworkflow/server:3.9.0" artifacthub.io/license: MIT artifacthub.io/category: integration-delivery # Free-form changelog for the current chart release shown by Artifact Hub. artifacthub.io/changes: | - kind: changed - description: "Default image changes from native Server 3.7.0 to 3.8.0. Every backend needs a schema upgrade (SQLite 11 to 12, PostgreSQL and MariaDB 12 to 13, MySQL 13 to 14) that only creates the empty dw_task_queue_pauses table and takes seconds. Scale to zero, back up, run helm upgrade with native.schemaUpgrade.enabled=true, scale up; rolling back means restoring the backup (docs/UPGRADING.md)." + description: "Default image changes from native Server 3.8.0 to 3.9.0. Every backend needs a schema upgrade (SQLite 12 to 13, PostgreSQL and MariaDB 13 to 14, MySQL 14 to 15) that only creates the empty dw_command_intents table. Scale to zero, back up, run helm upgrade with native.schemaUpgrade.enabled=true, scale up; rolling back means restoring the backup (docs/UPGRADING.md)." - kind: added - description: "Server 3.8.0: pause and resume activity dispatch on one task queue, advertised as capabilities.task_queue_activity_dispatch_pause (server#577); redrive reuses recorded side effects and version markers (server#980). https://github.com/durable-workflow/server/releases/tag/3.8.0" + description: "Server 3.9.0: signal and update request_id values are durable command keys; reusing a key with different input returns 409 request_id_conflict. A run's own close settles its open activities and timers. https://github.com/durable-workflow/server/releases/tag/3.9.0" - kind: changed - description: "Server 3.8.0: each MySQL, MariaDB and PostgreSQL pool connection caches up to 200 prepared statements. On MySQL check max_prepared_stmt_count (default 16382 fits about 20 nodes) or lower DW_NATIVE_DB_STATEMENT_CACHE_CAPACITY (server#1174)." + description: "Server 3.9.0 honors the configured storage-admission observation: draining refuses new work while existing leases can finish; fenced permits only reads. Completion uploads during draining remain unavailable (server#951)." diff --git a/k8s/helm/durable-workflow/README.md b/k8s/helm/durable-workflow/README.md index 96d9977d3..76f592e0a 100644 --- a/k8s/helm/durable-workflow/README.md +++ b/k8s/helm/durable-workflow/README.md @@ -77,7 +77,7 @@ helm install durable-workflow ./k8s/helm/durable-workflow \ ```yaml image: - tag: "3.8.0" + tag: "3.9.0" # Pin a digest in production: # digest: "sha256:abc123..." diff --git a/k8s/helm/durable-workflow/docs/UPGRADING.md b/k8s/helm/durable-workflow/docs/UPGRADING.md index 07e296324..d637e6de5 100644 --- a/k8s/helm/durable-workflow/docs/UPGRADING.md +++ b/k8s/helm/durable-workflow/docs/UPGRADING.md @@ -69,6 +69,61 @@ chart MINOR bump and an entry below. ## Per-version migration notes +### Chart 1.7.0 / Server 3.9.0 (native) + +**Every backend needs an explicit native schema upgrade.** Server 3.9.0 adds +one native-only table, `dw_command_intents`, created empty. It rewrites no +existing rows: + +| Backend | Schema | +| --- | --- | +| SQLite | 12 to 13 | +| PostgreSQL | 13 to 14 | +| MariaDB | 13 to 14 | +| MySQL | 14 to 15 | + +1. Scale the Server to zero, including every replica sharing the database. +2. Back up the database and external payload storage. +3. Run `helm upgrade` with `native.schemaUpgrade.enabled=true` (or the manual + schema-upgrade Job in the chart README) so the 3.9.0 image runs + `schema-upgrade` once. +4. Scale every Server back up on 3.9.0 and confirm readiness and worker + registration. + +Rolling back to 3.8.x requires restoring the backup taken in step 2: 3.8.0 +refuses the upgraded database with `native_schema_newer_than_binary`. +Started on the earlier schema, 3.9.0 refuses with +`native_schema_upgrade_required`. On MySQL and MariaDB an interrupted +upgrade resumes when `schema-upgrade` is run again; SQLite and PostgreSQL +upgrade in one transaction. + +From an earlier release, the same command applies every earlier step. On +MySQL from Server 3.6.x or earlier this includes the Chart 1.5.0 JSON rebuild +below, with its downtime of about 2 minutes per million history rows. + +**Behavior changes:** + +- A signal or update `request_id` is a durable command key. The same key + with different input returns `409 request_id_conflict` with zero writes. + Do not retry that 409 unchanged. Use the original input to recover the + receipt, or a new key for a new command. This differs from PHP 2.x. +- A run's own complete, fail or continue-as-new now cancels its open + activities and timers before its terminal event. A workflow that needs a + select loser's effect must await it before returning. Workers must handle + final `run_closed` refusals; sdk-php 3.17.0, sdk-python 2.17.0 and sdk-rust + 4.15.0 include the matching replay handling. +- Commands with names longer than their database columns now get a typed + `422` before any write, including on SQLite, which previously stored them. + +Native also honors `DW_STORAGE_ADMISSION_FILE`, +`DW_STORAGE_ADMISSION_SOURCE` and `DW_STORAGE_ADMISSION_MAX_AGE_SECONDS` when +configured. Draining refuses new work while existing leases can finish; +fenced or unavailable observations permit only reads. Completion uploads +during draining remain unavailable, so workers hold their results and retry +after pressure clears. See the +[storage-admission contract](../../../../docs/storage-admission.md#native-server) +and [Server 3.9.0 release notes](../../../../docs/releases/3.9.0.md). + ### Chart 1.6.0 / Server 3.8.0 (native) **Every backend needs an explicit native schema upgrade.** Server 3.8.0 adds diff --git a/k8s/helm/durable-workflow/values.yaml b/k8s/helm/durable-workflow/values.yaml index 182af0b7c..e5adaefdf 100644 --- a/k8s/helm/durable-workflow/values.yaml +++ b/k8s/helm/durable-workflow/values.yaml @@ -42,7 +42,7 @@ image: # scripts/ci/sync-source-release.mjs. Do not edit this default. # A tag must match the runtime: 3.x (or latest) for native, 2.x for php. # The chart refuses a mismatch at render time. - tag: "3.8.0" + tag: "3.9.0" # Optional digest pin. When set, takes precedence over tag for change control. # Example: "sha256:abc123..." # The chart cannot see which runtime a digest names. Pin a native digest diff --git a/resources/release/source-release.json b/resources/release/source-release.json index 26f307034..ab49328d2 100644 --- a/resources/release/source-release.json +++ b/resources/release/source-release.json @@ -4,7 +4,7 @@ "version": "2.11.8" }, "helm_chart": { - "version": "1.6.0", - "app_version": "3.8.0" + "version": "1.7.0", + "app_version": "3.9.0" } }