2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-22 19:08:55 +00:00

backup: Use buffered channels to collect backup status

When backing up many small files, the unbuffered channels frequently
cause the FileSaver to block when reporting progress information. Thus,
add buffers to these channels to avoid unnecessary scheduling.

As the status information is purely informational, it doesn't matter
that the status reporting shutdown is somewhat racy and could miss a few
final updates.
This commit is contained in:
Michael Eischer 2022-10-08 18:20:41 +02:00
parent 119e6aee01
commit d3ebec8f21

View File

@ -87,10 +87,13 @@ func NewProgress(printer ProgressPrinter) *Progress {
MinUpdatePause: time.Second / 60, MinUpdatePause: time.Second / 60,
start: time.Now(), start: time.Now(),
totalCh: make(chan Counter), // use buffered channels for the information used to update the status
processedCh: make(chan Counter), // the shutdown of the `Run()` method is somewhat racy, but won't affect
// the final backup statistics
totalCh: make(chan Counter, 100),
processedCh: make(chan Counter, 100),
errCh: make(chan struct{}), errCh: make(chan struct{}),
workerCh: make(chan fileWorkerMessage), workerCh: make(chan fileWorkerMessage, 100),
closed: make(chan struct{}), closed: make(chan struct{}),
summary: &Summary{}, summary: &Summary{},