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 <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2021-01-19 14:38:43 +01:00
parent ce26a165b0
commit 104469be0b
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
1 changed files with 6 additions and 3 deletions

View File

@ -99,6 +99,7 @@ func ServiceProgress(ctx context.Context, client client.APIClient, serviceID str
convergedAt time.Time convergedAt time.Time
monitor = 5 * time.Second monitor = 5 * time.Second
rollback bool rollback bool
message *progress.Progress
) )
for { 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) return fmt.Errorf("service rollback paused: %s", service.UpdateStatus.Message)
case swarm.UpdateStateRollbackCompleted: case swarm.UpdateStateRollbackCompleted:
if !converged { if !converged {
progress.Messagef(progressOut, "", "service rolled back: %s", service.UpdateStatus.Message) message = &progress.Progress{ID: "rollback", Message: service.UpdateStatus.Message}
return nil
} }
rollback = true
} }
} }
if converged && time.Since(convergedAt) >= monitor { if converged && time.Since(convergedAt) >= monitor {
@ -150,7 +151,9 @@ func ServiceProgress(ctx context.Context, client client.APIClient, serviceID str
ID: "verify", ID: "verify",
Action: "Service converged", Action: "Service converged",
}) })
if message != nil {
progressOut.WriteProgress(*message)
}
return nil return nil
} }