KB-1 Confirmed
Without a render store, status reports a rollback that did not occur
Behavior#
A rollback applies the last healthy render. convoy reads that render from the render store.
Without a render store (no --render-store-url), convoy has no stored render, so it cannot roll
back. This part is the expected behavior.
The defect is in the status. When a rollout fails and spec.failurePolicy.rollback is not
Never:
- convoy selects a rollback, because
status.lastHealthyis set. It does not check for a render store. - The rollback step finds no render store and does nothing.
- convoy still writes rollout state
RolledBackandApplied=Truewith reasonRolledBack.
The same report appears when a render store is configured, but convoy cannot read or apply the last healthy render. convoy then does not retry with backoff. It tries again at the next periodic reconcile.
Effect#
The status says that the Release rolled back. The cluster still runs the failed render.
InSync can read True, because the observer compares the cluster with the failed render.
Workaround#
- Configure a render store on
convoy-controller-managerandconvoy-observer(the same--render-store-urlon both). - Or set
spec.failurePolicy.rollback: Neverwhen convoy runs without a render store.
Fix direction#
- Report that a rollback is not possible: rollout state
Failedand a dedicated reason that names the missing render store. - Make a
rollbackvalue other thanNeverrequire a render store.
In the code
convoy v0.9.0
internal/controller/release.rollbackEligibleinternal/controller/release/controller.go:1568internal/controller/release.(*Controller).planRolloutinternal/controller/release/controller.go:1511internal/controller/release.(*Controller).applyLastHealthyinternal/controller/release/controller.go:1644