design: InPlace update strategy for SeiNodeDeployment#79
Merged
Conversation
LLD for formalizing the InPlace update strategy as an explicit UpdateStrategyType alongside BlueGreen and HardFork. Covers CRD changes, rollout status tracking, upgrade height gating, the sidecar mark-ready restart fix, and failure modes. Key decisions: - No plan/task machinery — uses existing ensureSeiNode path - ensureMarkReady in reconcileRunning unblocks all pod restarts - Optional upgradeHeight gating prevents premature rollouts - No auto-rollback (unsafe for chain upgrades) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bdchatham
commented
Apr 13, 2026
- Remove nil/no-strategy path; updateStrategy is now required - Unify DeploymentStatus and RolloutStatus into single RolloutStatus - Drop upgradeHeight gating (no reliable block height source) - Introduce conditions-driven reconciliation pattern with RolloutInProgress as the coordination mechanism between reconciler (detects diffs) and planner (actions them) - Document block height sourcing as open problem - Migrate BlueGreen/HardFork to use unified RolloutStatus Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add zero-value migration handling for existing CRDs without updateStrategy (treat empty Type as InPlace, log warning) - Restore IncumbentRevision on RolloutStatus (needed by BlueGreen) - Add stalled rollout escalation: RolloutInProgress reason transitions to Stalled after 10min, providing durable alerting signal - Add design principles section: small condition vocabulary, RolloutStatus as real state machine, simultaneous rollout rationale Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
12 tasks
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.
Summary
UpdateStrategyTypealongside BlueGreen and HardForkKey Design Decisions
ensureSeiNodein-place propagation path with rollout status tracking layered on topensureMarkReadyinreconcileRunning— solves the sidecar restart problem for ALL strategies (pod restarts cause sidecar to block seid indefinitely). This is the highest-priority standalone fixupgradeHeightgating — when set, the controller validates the chain has reached the upgrade height before patching StatefulSets, preventing premature rolloutsRolloutStatustracking — per-node convergence status distinct fromDeploymentStatus(which tracks entrant/incumbent for blue-green)Design Covers
InPlaceStrategy,RolloutStatustypes)detectDeploymentNeededbranching, rollout status reconciliation)📄 Design doc:
.tide/designs/inplace-update-strategy.md🤖 Generated with Claude Code