KB-18 Confirmed
The API docs say that waveStrategy.timeout waits without a limit, but a syncWave mutation gets 30s
Behavior#
spec.syncPolicy.waveStrategy and the syncWave mutation use the same type. Its timeout field
has this description: “If not set, controller will wait indefinitely”. You see this text in
kubectl explain and in the API Reference.
- For
spec.syncPolicy.waveStrategy.timeout, the text is true. Withouttimeout, a Release waits without a time limit. - For
mutations[].waveStrategy.timeout, the text is not true. Withouttimeout, the mutation does not write theconvoy.kumodo.io/sync-timeoutannotation. A wave withwaitForHealthyWithTimeoutthen gets the default time limit of30s.
Effect#
A syncWave mutation with strategy: waitForHealthyWithTimeout and no timeout fails the wave
after 30 seconds. The result is WaveFailed, RolloutFailed or a rollback, not a wait without a
limit.
Workaround#
Always set timeout in a syncWave mutation with waitForHealthyWithTimeout. To wait without a
time limit, use strategy: waitForHealthy.
Fix direction#
Give the mutation field its own description with the 30s default. Or make a missing timeout
mean “no time limit” in both places.
In the code
convoy v0.9.0
internal/render.applySyncWaveinternal/render/mutate.go:122internal/waves.TimeoutOfinternal/waves/waves.go:89internal/waves.ClusterWaveBoundinternal/waves/cluster.go:54