Merge pull request #44837 from vvoland/c8d-fix-progress-notending-upstream

c8d/progress: Update progress when finished
This commit is contained in:
Tianon Gravi 2023-01-26 14:58:09 -08:00 committed by GitHub
commit 6a69560847
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -36,6 +36,7 @@ func (j *jobs) showProgress(ctx context.Context, out progress.Output, updater pr
ctx, cancelProgress := context.WithCancel(ctx)
start := time.Now()
lastUpdate := make(chan struct{})
go func() {
ticker := time.NewTicker(100 * time.Millisecond)
@ -48,15 +49,24 @@ func (j *jobs) showProgress(ctx context.Context, out progress.Output, updater pr
if !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) {
logrus.WithError(err).Error("Updating progress failed")
}
return
}
case <-ctx.Done():
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*500)
defer cancel()
updater.UpdateProgress(ctx, j, out, start)
close(lastUpdate)
return
}
}
}()
return cancelProgress
return func() {
cancelProgress()
// Wait for the last update to finish.
// UpdateProgress may still write progress to output and we need
// to keep the caller from closing it before we finish.
<-lastUpdate
}
}
// Add adds a descriptor to be tracked