From 104469be0b9f26a9fc8881b0cac3a91a7dd6d4f0 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 19 Jan 2021 14:38:43 +0100 Subject: [PATCH] service rollback: always verify state Prior to this change, progressbars would sometimes be hidden, and the function would return early. In addition, the direction of the progressbars would sometimes be "incrementing" (similar to "docker service update"), and sometimes be "decrementing" (to indicate a "rollback" is being performed). This fix makes sure that we always proceed with the "verifying" step, and now prints a message _after_ the verifying stage was completed; $ docker service rollback foo foo overall progress: rolling back update: 5 out of 5 tasks 1/5: running [> ] 2/5: starting [===========> ] 3/5: starting [===========> ] 4/5: running [> ] 5/5: running [> ] verify: Service converged rollback: rollback completed $ docker service rollback foo foo overall progress: rolling back update: 1 out of 1 tasks 1/1: running [> ] verify: Service converged rollback: rollback completed Signed-off-by: Sebastiaan van Stijn --- cli/command/service/progress/progress.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cli/command/service/progress/progress.go b/cli/command/service/progress/progress.go index 261cfe55ae..3ed41cb9e4 100644 --- a/cli/command/service/progress/progress.go +++ b/cli/command/service/progress/progress.go @@ -99,6 +99,7 @@ func ServiceProgress(ctx context.Context, client client.APIClient, serviceID str convergedAt time.Time monitor = 5 * time.Second rollback bool + message *progress.Progress ) for { @@ -140,9 +141,9 @@ func ServiceProgress(ctx context.Context, client client.APIClient, serviceID str return fmt.Errorf("service rollback paused: %s", service.UpdateStatus.Message) case swarm.UpdateStateRollbackCompleted: if !converged { - progress.Messagef(progressOut, "", "service rolled back: %s", service.UpdateStatus.Message) - return nil + message = &progress.Progress{ID: "rollback", Message: service.UpdateStatus.Message} } + rollback = true } } if converged && time.Since(convergedAt) >= monitor { @@ -150,7 +151,9 @@ func ServiceProgress(ctx context.Context, client client.APIClient, serviceID str ID: "verify", Action: "Service converged", }) - + if message != nil { + progressOut.WriteProgress(*message) + } return nil }