Skip to content

postgres-multi-location 2.0.1: patroni-postgres 0.8 (pgvector 0.8.7, CVE-2026-103484) - #665

Closed
jacobecox wants to merge 9 commits into
mainfrom
jacob/postgres-multi-location-2.0.1
Closed

jacobecox wants to merge 9 commits into
mainfrom
jacob/postgres-multi-location-2.0.1

Conversation

@jacobecox

@jacobecox jacobecox commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

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.8 is 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 PGDG postgresql-{13..17}-pgvector packages from 0.8.0 to 0.8.7-1.pgdg22.04+1. The full package lists of 0.7 and 0.8 differ only in those five packages plus ca-certificates (20240203 → 20260816, which also drops the compromised eMudhra CAs) and curl/libcurl4; user, entrypoint and command are unchanged. Published 2026-10-23, digest sha256: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

  • Image :0.7 → :0.8 (Patroni container and the WAL-G sidecar), lastModified. appVersion stays "17" (it tracks the PostgreSQL major).
  • pg-ml.validateImage (new fail from pg-ml.validate): refuses controlplanecorporation/patroni-postgres tags 0.1–0.7 (with or without docker.io/), because a wizard install stores image and a helm upgrade -f would keep 0.7. Other registries, digests and other tags pass. Mirrored by a wizard rule.
  • README "Upgrading from 2.0.0": upgrade in place with the usual write outage; data and indexes need nothing; \dx shows the old vector version until ALTER 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

Row Result
Upgrade 2.0.0 → 2.0.1 (values from tw carry) 1000 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; vector default_version 0.8.7, extversion 0.8.0 until ALTER EXTENSION vector UPDATE then 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)
In the container all five vector.control 0.8.7 on both members; wal-g 3.0.5, gosu 1.16, curl run
Guard live :0.7, docker.io/…:0.7, :0.1, :0.7.1 refused; revision, workload version and stored spec unchanged
Fresh install ready ~2m48s; a write through the proxy in one location reads back through the proxy in the other; vector 0.8.7
Drift drift-diff.py clean ✓ on 2.0.0, after the upgrade and on a fresh 2.0.1; second no-op upgrade all Unchanged
Teardown janitor == 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:

  • The start script waits at most 120 s for any member.
  • HAProxy re-resolves server names at runtime (resolvers mesh).
  • readinessProbe on /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:

Row Result
Upgrade 2.0.0 → 2.0.1 115 s in both locations, all of it Patroni's leaderless window. The proxy's share after the leader was UP was 0.04 s (west) and ≤ 3.2 s (east). Old proxies were kept until new ones were listening. 0 writes lost this run
Proxy redeploy while a member is hung 0 failed writes in either location
3 failovers by hanging the leader 45–49 s per location, equal to the leaderless window. 0 proxy restarts, 0 writes lost
Fresh install with PgBouncer writes and reads through HAProxy and through PgBouncer; 0 restarts
Drift clean ✓. Second no-op upgrade 15/15 Unchanged
Teardown janitor clean ✓; GVC restored and re-read identical to its before-state

Wizard gates

  • tw lint: ok postgres-multi-location 2.0.1 (previous 2.0.0): 0 errors, 0 warnings, 64/64 leaves covered
  • tw carry from 2.0.0 defaults and from values pinning :0.7 → :0.8, renders
  • tw check-docs: ok postgres-multi-location 2.0.1: 24 links on 5 pages

Next: 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

jacobecox and others added 2 commits October 23, 2026 17:48
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)
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Template e2e tests

⚠️ mariadb/1.4.1 — 28/32 passed, 4 warnings (8.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/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

Run logs

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)
@jacobecox

Copy link
Copy Markdown
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.

@jacobecox jacobecox closed this Oct 27, 2026
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

1 active deployment
e2e-nifah — 3a9e48bf Deployed Oct 27, 2026 by jacobecox via test (redis-cluster/1.7.0) #74
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant