2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-23 03:18:55 +00:00

Merge pull request #3401 from MichaelEischer/goroutine-shutdown-cleanups

Goroutine shutdown cleanups
This commit is contained in:
Alexander Neumann 2021-07-11 16:32:28 +02:00 committed by GitHub
commit c707d71b72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 10 deletions

View File

@ -708,15 +708,17 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, term *termstatus.Termina
p.V("start backup on %v", targets)
}
_, id, err := arch.Snapshot(gopts.ctx, targets, snapshotOpts)
if err != nil {
return errors.Fatalf("unable to save snapshot: %v", err)
}
// cleanly shutdown all running goroutines
t.Kill(nil)
// let's see if one returned an error
err = t.Wait()
werr := t.Wait()
// return original error
if err != nil {
return errors.Fatalf("unable to save snapshot: %v", err)
}
// Report finished execution
p.Finish(id)
@ -728,5 +730,5 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, term *termstatus.Termina
}
// Return error if any
return err
return werr
}

View File

@ -25,16 +25,21 @@ const numDeleteWorkers = 8
func deleteFiles(gopts GlobalOptions, ignoreError bool, repo restic.Repository, fileList restic.IDSet, fileType restic.FileType) error {
totalCount := len(fileList)
fileChan := make(chan restic.ID)
go func() {
wg, ctx := errgroup.WithContext(gopts.ctx)
wg.Go(func() error {
defer close(fileChan)
for id := range fileList {
fileChan <- id
select {
case fileChan <- id:
case <-ctx.Done():
return ctx.Err()
}
}
close(fileChan)
}()
return nil
})
bar := newProgressMax(!gopts.JSON && !gopts.Quiet, uint64(totalCount), "files deleted")
defer bar.Done()
wg, ctx := errgroup.WithContext(gopts.ctx)
for i := 0; i < numDeleteWorkers; i++ {
wg.Go(func() error {
for id := range fileChan {