docs(decisions): add ADR-0029 zero-downtime blue-green stack deploys - #70
Merged
Merged
Conversation
Specify opt-in blue-green deployments: routed services warm up in a
generation-scoped compose project ({base}--g{n}), a mandatory compose-file
healthcheck gates readiness, traffic swaps via the existing atomic
route-table replace under a generation-scoped alias, and the old set is
drained and removed. Stateful services stay shared in the base project;
the operator-facing deployment contract requires expand-contract
migrations. Status: Proposed — spec only, no implementation.
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.
What
Adds ADR-0029 (status Proposed) specifying zero-downtime stack deployments, plus its index entry in
docs/decisions/README.md. Specification only — no code changes.Why
Every deploy currently has a built-in 502 window:
compose up -drecreates containers stop-first, and recreated containers only rejoin the ingress network afterupreturns. Under products/releases (ADR-0026) a rollout multiplies that blip across every tenant. This ADR records the design for closing that window.The design in brief
DeploymentStrategy(recreate|blue-green) on the product, overridable on template/stack; defaultrecreate, existing stacks unchanged.{base}--g{n}, attached to the base project's network/volumes viaexternaldeclarations. Stateful services stay shared — duplicating a database per deploy was analyzed and rejected.State.Healthuntil all healthy, fails fast onunhealthy/exited, and a failed deploy leaves the old generation serving untouched.SocketsHttpHandlerpools connections by host:port with infinite lifetime, so a stable alias would keep warm sockets on the old containers.HEALTHCHECKis invisible tocompose config), no published host ports /container_name(refused, not stripped), aliases fit a DNS label, and versions N/N−1 must coexist against the shared DB (expand-contract migrations).DeploymentSlotReaper.Reviewer notes
ComposeProjectNameconsumer becomes slot-aware) — that scope is the main thing to sanity-check.compose up --wait,!resetport stripping) are recorded with reasoning; a pre-swap quiesce lifecycle hook is kept as future work.