Repository navigation
Conversation
Copied from 1b0c144 (head of PR #629: 2.0.0's reviewed wizard.yaml and in-place fixes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
…VE-2026-103484) - Default image controlplanecorporation/patroni-postgres:0.7 -> 0.8 (spilo-17 4.0-p3 with PGDG pgvector 0.8.0 -> 0.8.7; ca-certificates/curl refreshed). Used by the Patroni container and the WAL-G sidecar. - pg-ml.validateImage refuses patroni-postgres plain-version tags 0.1-0.7 (with or without docker.io/); digests, other registries and non-version tags pass. Mirrored by a wizard rule on the image field, plus an upgrade note on the extension version record. - README: "Upgrading from 2.0.0" section; image default updated. - Chart.yaml: version 2.0.1, lastModified 2026-10-23. appVersion stays "17" (it tracks the PostgreSQL major, not the image tag). - Briefing (seeded from 1b0c144, PR #629's version): image default and a 2.0.1 section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
…ery Patroni member The startup gate waited for every member to answer :8008 before starting HAProxy, and the proxy workload had no readiness probe. A chart upgrade redeploys the proxy while Patroni is rolling, so the new proxies were counted ready and the old ones retired while the new ones sat in the gate: writes were refused for ~75-130 s although the leader never moved (measured on all three Patroni charts in 5376 testing). - HAProxy re-resolves server names at runtime (resolvers mesh, copied from pgedge 3.0.0), so a placeholder address from the mesh DNS heals itself; that was the gate's only reason to exist. - The start script waits at most 120s for ANY member's Patroni API, then starts regardless. - readinessProbe on /healthz :8404 (a leader is routable), so an upgrade keeps the old proxy replicas serving until a new one can reach the primary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
…s to what testing measured The replica names are per-replica mesh addresses that exist from workload creation (measured 2026-10-26), so no placeholder address was observed; runtime DNS stays as a safety net. The resolvers comment moves out of the heredoc so it is no longer written into haproxy.cfg and the start log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
/healthz fails whenever no leader is routable; in hang-failover tests (2026-10-26, this chart and timescaledb-highly-available) the platform stopped proxy replicas after each leaderless window, while clients were still routed to them. The upgrade overlap only needs HAProxy listening, which /stats :8405 shows (as pgedge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
…nt writes Measured 2026-10-26 (pre-existing in 2.0.0): every Patroni-restarting upgrade restarted all members together, the first member back was promoted from stale WAL and 45 and 40 acknowledged writes were lost. README (Upgrading, Patroni timing, Important Notes) and the wizard upgrade note now say so and tell the user to stop writes; the 'Nothing else changes' line now mentions the proxy start-up change. Maintainer ruling: document now, fix in a separate work item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
… fix and upgrade write loss, measured Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
Template e2e tests
|
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau10-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau10-maria spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau10-maria spec.defaultOptions.autoscaling.target: stored 95, chart omits it |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | root-login | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | root-login | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau10u132-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau10u132-maria spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau10u132-maria spec.defaultOptions.autoscaling.target: stored 95, chart omits it |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | root-login | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | root-login | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-maria-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7dau10u100-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2e |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | root-login | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-maria-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (rows for 1.0.0: 0) WARNING: option --ssl-verify-server-cert |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ mongodb/1.4.1 — 23/27 passed, 4 warnings (7.0 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau11-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau11-mongo spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau11-mongo spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau11-mongo spec.defaultOptions.timeoutSeconds: stored 5, chart omits it |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau11u132-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau11u132-mongo spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau11u132-mongo spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau11u132-mongo spec.defaultOptions.timeoutSeconds: stored 5, char |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mongo-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7dau11u100-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2e |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mongo-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (documents for 1.0.0: 0) |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ mysql/1.5.2 — 31/32 passed, 1 warning (7.1 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.5.2 | install + every workload ready | pass |
| install 1.5.2 | rendered == stored (Console Drift tab) | pass |
| install 1.5.2 | write-read | pass |
| install 1.5.2 | root-login | pass |
| install 1.5.2 | rejects-bad-password | pass |
| install 1.5.2 | data-survives-upgrade | pass |
| install 1.5.2 | no-op upgrade ×2 (no churn) | pass |
| install 1.5.2 | uninstall removes everything | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | install 1.4.0 (starting point) | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | write-read | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | root-login | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | rejects-bad-password | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | data-survives-upgrade | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | upgrade to 1.5.2 + every workload ready | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | rendered == stored (Console Drift tab) | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | write-read | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | root-login | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | rejects-bad-password | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | data-survives-upgrade | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | root-login | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | upgrade to 1.5.2 + every workload ready | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | rendered == stored (Console Drift tab) | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | root-login | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mysql-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (rows for 1.0.0: 0) |
| upgrade 1.0.0 → 1.5.2 (new values) | uninstall removes everything | pass |
⚠️ pgvector/1.0.0 — 7/8 passed, 1 warning (1.1 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.0.0 | install + every workload ready | pass |
| install 1.0.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau13-pgvector spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau13-pgvector spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau13-pgvector spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau13-pgvector spec.defaultOptions.timeoutSeconds: stored 5, chart om |
| install 1.0.0 | write-read | pass |
| install 1.0.0 | extension-works | pass |
| install 1.0.0 | rejects-bad-password | pass |
| install 1.0.0 | data-survives-upgrade | pass |
| install 1.0.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.0.0 | uninstall removes everything | pass |
⚠️ postgis/1.4.1 — 28/32 passed, 4 warnings (5.3 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau14-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau14-postgis spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau14-postgis spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau14-postgis spec.defaultOptions.timeoutSeconds: stored 5, chart omits |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | extension-works | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | extension-works | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau14u132-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau14u132-postgis spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau14u132-postgis spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau14u132-postgis spec.defaultOptions.timeoutSeconds: stored |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | extension-works | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | extension-works | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-postgis-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7dau14u100-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | extension-works | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-postgis-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 3/3): MISSING (rows for 1.0.0: 0) |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ postgres-highly-available/2.8.0 — 18/20 passed, 2 warnings (11.6 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 2.8.0 | install + every workload ready | pass |
| install 2.8.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau15-postgres-ha spec.containers[0].livenessProbe.httpGet.scheme: stored "HTTP", chart omits it; workload/e2eikn7dau15-postgres-ha spec.containers[0].livenessProbe.initialDelaySeconds: stored 60, chart omits it; workload/e2eikn7dau15-postgres-ha spec.containers[0].livenessProbe.successThreshold: stored 1, chart omits it; workload/e2eikn7dau15-postgres-ha spec.containers[0].read |
| install 2.8.0 | cluster-healthy | pass |
| install 2.8.0 | write-read-via-proxy | pass |
| install 2.8.0 | rejects-bad-password | pass |
| install 2.8.0 | data-survives-upgrade | pass |
| install 2.8.0 | no-op upgrade ×2 (no churn) | pass |
| install 2.8.0 | uninstall removes everything | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | install 2.4.1 (starting point) | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | cluster-healthy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | write-read-via-proxy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | rejects-bad-password | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | data-survives-upgrade | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | upgrade to 2.8.0 + every workload ready | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau15u241-postgres-ha spec.containers[0].livenessProbe.httpGet.scheme: stored "HTTP", chart omits it; workload/e2eikn7dau15u241-postgres-ha spec.containers[0].livenessProbe.initialDelaySeconds: stored 60, chart omits it; workload/e2eikn7dau15u241-postgres-ha spec.containers[0].livenessProbe.successThreshold: stored 1, chart omits it; workload/e2eikn7dau15u241-postgres-ha spec.co |
| upgrade 2.4.1 → 2.8.0 (new values) | cluster-healthy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | write-read-via-proxy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | rejects-bad-password | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | data-survives-upgrade | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | uninstall removes everything | pass |
⚠️ redis-cluster/1.7.0 — 18/20 passed, 2 warnings (9.7 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.7.0 | install + every workload ready | pass |
| install 1.7.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau16-redis-cluster spec.rolloutOptions.maxUnavailableReplicas: chart sends "1", API did not keep it; workload/e2eikn7dau16-redis-cluster spec.rolloutOptions.terminationGracePeriodSeconds: stored 90, chart omits it |
| install 1.7.0 | cluster-healthy | pass |
| install 1.7.0 | write-read | pass |
| install 1.7.0 | rejects-bad-password | pass |
| install 1.7.0 | data-survives-upgrade | pass |
| install 1.7.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.7.0 | uninstall removes everything | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | install 1.4.3 (starting point) | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | cluster-healthy | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | write-read | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | rejects-bad-password | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | data-survives-upgrade | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | upgrade to 1.7.0 + every workload ready | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau16u143-redis-cluster spec.rolloutOptions.maxUnavailableReplicas: chart sends "1", API did not keep it; workload/e2eikn7dau16u143-redis-cluster spec.rolloutOptions.terminationGracePeriodSeconds: stored 90, chart omits it |
| upgrade 1.4.3 → 1.7.0 (new values) | cluster-healthy | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | write-read | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | rejects-bad-password | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | data-survives-upgrade | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | uninstall removes everything | pass |
✅ tidb/2.2.0 — 10/10 passed (5.4 min, aws-us-east-1, aws-us-east-2, aws-us-west-2)
| Scenario | Check | Result |
|---|---|---|
| install 2.2.0 | install + every workload ready | pass |
| install 2.2.0 | rendered == stored (Console Drift tab) | pass |
| install 2.2.0 | stores-up | pass |
| install 2.2.0 | write-read-via-server | pass |
| install 2.2.0 | write-read-via-proxysql | pass |
| install 2.2.0 | root-password-set | pass |
| install 2.2.0 | rejects-bad-password | pass |
| install 2.2.0 | data-survives-upgrade | pass |
| install 2.2.0 | no-op upgrade ×2 (no churn) | pass |
| install 2.2.0 | uninstall removes everything | pass |
⚠️ timescaledb/1.2.0 — 18/20 passed, 2 warnings (3.1 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.2.0 | install + every workload ready | pass |
| install 1.2.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau18-timescaledb spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau18-timescaledb spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau18-timescaledb spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau18-timescaledb spec.defaultOptions.timeoutSeconds: stored |
| install 1.2.0 | write-read | pass |
| install 1.2.0 | extension-works | pass |
| install 1.2.0 | rejects-bad-password | pass |
| install 1.2.0 | data-survives-upgrade | pass |
| install 1.2.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.2.0 | uninstall removes everything | pass |
| upgrade 1.1.1 → 1.2.0 | install 1.1.1 (starting point) | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | write-read | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | extension-works | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | rejects-bad-password | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | data-survives-upgrade | pass |
| upgrade 1.1.1 → 1.2.0 | upgrade to 1.2.0 + every workload ready | pass |
| upgrade 1.1.1 → 1.2.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7dau18u111-timescaledb spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7dau18u111-timescaledb spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7dau18u111-timescaledb spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7dau18u111-timescaledb spec.defaultOptions.timeou |
| upgrade 1.1.1 → 1.2.0 | write-read | pass |
| upgrade 1.1.1 → 1.2.0 | extension-works | pass |
| upgrade 1.1.1 → 1.2.0 | rejects-bad-password | pass |
| upgrade 1.1.1 → 1.2.0 | data-survives-upgrade | pass |
| upgrade 1.1.1 → 1.2.0 | uninstall removes everything | pass |
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
…t tighten it, stop-writes advice on Review, install-only credentials note From the console wizard round (2026-10-27): the release-name rule only showed on Review although PgBouncer/logical backups lower the limit, so it now has paths; 'stop writes before you upgrade' (work item 5396) was only on step 4, so an upgrade-only info rule puts it in Review's advice; the credentials note used install wording on upgrade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
Contributor
Author
|
Combined into #685 so work item 5376 is one merge (maintainer request). This branch is merged into it unchanged; the write-up and test evidence above stay the reference for this template. |
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484)
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
postgres-multi-location 2.0.1 moves to
controlplanecorporation/patroni-postgres:0.8, fixing CVE-2026-103484 in the bundled pgvector (0.8.0 → 0.8.7): a database user who can build an IVFFlat index can run code as the server (pgvector#1036). Work item 5376.patroni-postgres:0.8is our image rebuilt from the same Dockerfile as 0.7 (spilo-17 4.0-p3 + gosu + WAL-G v3.0.5) with one added step that upgrades the PGDGpostgresql-{13..17}-pgvectorpackages from 0.8.0 to0.8.7-1.pgdg22.04+1. The full package lists of 0.7 and 0.8 differ only in those five packages plusca-certificates(20240203 → 20260816, which also drops the compromised eMudhra CAs) andcurl/libcurl4; user, entrypoint and command are unchanged. Published 2026-10-23, digestsha256:b5d1a826….Review diff:
git diff e05fab06..HEAD -- postgres-multi-location/versions/2.0.1/. Commit e05fab0 is the verbatim copy of 2.0.0 taken from #629's head (1b0c144), so 2.0.1 carries that PR's reviewed wizard and in-place fixes; the briefing edit also starts from #629's. If #629 changes before merge, 2.0.1 needs the same change.What changed
:0.7→:0.8(Patroni container and the WAL-G sidecar),lastModified.appVersionstays"17"(it tracks the PostgreSQL major).pg-ml.validateImage(newfailfrompg-ml.validate): refusescontrolplanecorporation/patroni-postgrestags 0.1–0.7 (with or withoutdocker.io/), because a wizard install storesimageand ahelm upgrade -fwould keep 0.7. Other registries, digests and other tags pass. Mirrored by a wizard rule.\dxshows the old vector version untilALTER EXTENSION vector UPDATE;; a pinned 0.7 is refused. wizard: mirrored rule and an upgrade note. Briefing: image row and 2.0.1 section.Render vs 2.0.0: only the image line(s) and version labels differ (defaults, logical backup + pgbouncer, WAL-G on GCP).
Tests (live, test-gvc-3 temporarily given aws-us-east-1 + aws-us-west-2, maintainer-approved; restored afterwards) — 6/6 PASS
tw carry)vector(3)rows, ivfflat + hnsw: checksum and indexes intact on leader and replica, both used; Patroni leader on TL 2, cross-region replica streaming lag 0; etcd healthy, not restarted; vectordefault_version0.8.7, extversion 0.8.0 untilALTER EXTENSION vector UPDATEthen 0.8.7 on both; new ivfflat index builds. Boot-time GVC check passes on the new image (GET /org/…/gvc/test-gvc-3 HTTP/1.1 200 … curl/7.81.0,GVC location check OK)vector.control0.8.7 on both members; wal-g 3.0.5, gosu 1.16, curl run:0.7,docker.io/…:0.7,:0.1,:0.7.1refused; revision, workload version and stored spec unchangeddrift-diff.pyclean ✓ on 2.0.0, after the upgrade and on a fresh 2.0.1; second no-op upgrade allUnchanged== test-gvc-3 is clean ✓Also in 2.0.1 (maintainer rulings 2026-10-26)
The proxy no longer blocks startup on every member, which caused the 131 s upgrade outage. Through 2.0.0, the proxy waited for every member in every location to answer :8008 (900 s timeout), and the proxy workload had no readiness probe. The fix is copied from pgedge 3.0.0:
resolvers mesh).readinessProbeon/stats:8405, true once HAProxy is listening.The first version used
/healthz, which is true only while a leader is routable. That got the platform to restart proxy replicas after each leaderless window, while clients were still routed to them, so readiness now uses/stats.An upgrade can lose recently acknowledged writes. This is pre-existing and documented now; the fix is in work item 5396. All members restart together, so the leader has no caught-up replica for its switchover. Whichever member comes back first is promoted. Measured: 45 and 40 acknowledged writes lost in two upgrades, and 0 in a third upgrade where the old leader came back first. The README (upgrade section, Patroni timing, Important Notes) and the wizard upgrade note now tell users to stop writes for an upgrade.
Re-test with the final proxy (test-gvc-3, east+west temporarily, restored afterwards), with continuous writes in both locations:
clean ✓. Second no-op upgrade 15/15Unchangedclean ✓; GVC restored and re-read identical to its before-stateWizard gates
tw lint:ok postgres-multi-location 2.0.1 (previous 2.0.0): 0 errors, 0 warnings, 64/64 leaves coveredtw carryfrom 2.0.0 defaults and from values pinning:0.7→:0.8, renderstw check-docs:ok postgres-multi-location 2.0.1: 24 links on 5 pagesNext: the wizard-verifier round in the test console. Hold for the joint review with the maintainer before merge.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4