From 257d0af591f25d89ad3335aae31d3557c5977888 Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Thu, 12 Nov 2026 22:54:46 +0000 Subject: [PATCH] Chart 1.6.0: default to native Server 3.8.0 Every backend runs one schema-upgrade step that creates the empty dw_task_queue_pauses table. UPGRADING notes the steps, the backup-only rollback and MySQL's prepared-statement budget. Co-Authored-By: Claude Opus 5.5 --- k8s/helm/durable-workflow/Chart.yaml | 14 +++++----- k8s/helm/durable-workflow/README.md | 2 +- k8s/helm/durable-workflow/docs/UPGRADING.md | 31 +++++++++++++++++++++ k8s/helm/durable-workflow/values.yaml | 2 +- resources/release/source-release.json | 4 +-- 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/k8s/helm/durable-workflow/Chart.yaml b/k8s/helm/durable-workflow/Chart.yaml index 523a5b398..126468acb 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.5.0 +version: 1.6.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.7.0" +appVersion: "3.8.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.7.0" + dev.durable-workflow.image-reference: "docker.io/durableworkflow/server:3.8.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.6.0 to 3.7.0. MySQL only needs a schema upgrade, 12 to 13: its 75 json columns become exact-text LONGTEXT with json_valid checks, about 2 minutes of downtime per million history rows. Scale to zero, back up, run helm upgrade with native.schemaUpgrade.enabled=true, scale up; rolling back means restoring the backup. MariaDB, PostgreSQL and SQLite have no schema change, so helm upgrade only replaces the image (docs/UPGRADING.md)." - - kind: fixed - description: "Server 3.7.0: MySQL stores JSON documents exactly, so doubles in history, memos, search attributes and heartbeat details come back bit for bit (server#1016)." + 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)." - kind: added - description: "Server 3.7.0: redrive keeps start-time memos and search attributes, and describe reports can_redrive and redrive_blocked_reason (server#980). https://github.com/durable-workflow/server/releases/tag/3.7.0" + 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" + - 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)." diff --git a/k8s/helm/durable-workflow/README.md b/k8s/helm/durable-workflow/README.md index d8e4bd5fc..96d9977d3 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.7.0" + tag: "3.8.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 54f1f532a..07e296324 100644 --- a/k8s/helm/durable-workflow/docs/UPGRADING.md +++ b/k8s/helm/durable-workflow/docs/UPGRADING.md @@ -69,6 +69,37 @@ chart MINOR bump and an entry below. ## Per-version migration notes +### Chart 1.6.0 / Server 3.8.0 (native) + +**Every backend needs an explicit native schema upgrade.** Server 3.8.0 adds +one native-only table, `dw_task_queue_pauses`, created empty: SQLite 11 to +12, PostgreSQL 12 to 13, MariaDB 12 to 13 and MySQL 13 to 14. The step +rewrites no rows and takes seconds. Started on the earlier schema, 3.8.0 +refuses with `native_schema_upgrade_required`. + +1. Scale the Server to zero. +2. Back up the database. +3. Run `helm upgrade` with `native.schemaUpgrade.enabled=true` (or the manual + schema-upgrade Job in the chart README) so the 3.8.0 image runs + `schema-upgrade` once. +4. Scale the Server back up. + +Rolling back to 3.7.x requires restoring the backup taken in step 2: 3.7.0 +refuses the upgraded database with `native_schema_newer_than_binary`. + +From an earlier release, the 3.8.0 image's `schema-upgrade` applies every +earlier step in the same run. On MySQL from Server 3.5.x or 3.6.x that +includes the Chart 1.5.0 JSON rebuild below, with its downtime of about 2 +minutes per million history rows. + +**MySQL prepared statements.** Each MySQL, MariaDB and PostgreSQL pool +connection now caches up to 200 prepared statements. A native node has 4 pool +connections, so on MySQL keep `replicas × 4 × 200` plus other clients' +statements within `max_prepared_stmt_count` (default 16382, about 20 nodes), +or lower the cache with `DW_NATIVE_DB_STATEMENT_CACHE_CAPACITY` (0 to 4095) +in `config.extraEnv`. +See the [3.8.0 release notes](https://github.com/durable-workflow/server/releases/tag/3.8.0). + ### Chart 1.5.0 / Server 3.7.0 (native) **MySQL only: this upgrade needs an explicit native schema upgrade, 12 to 13.** diff --git a/k8s/helm/durable-workflow/values.yaml b/k8s/helm/durable-workflow/values.yaml index 71c2f1ef9..182af0b7c 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.7.0" + tag: "3.8.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 e82b7a94a..26f307034 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.5.0", - "app_version": "3.7.0" + "version": "1.6.0", + "app_version": "3.8.0" } }