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,
start: time.Now(),
totalCh: make(chan Counter),
processedCh: make(chan Counter),
// use buffered channels for the information used to update the status
// 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{}),
workerCh: make(chan fileWorkerMessage),
workerCh: make(chan fileWorkerMessage, 100),
closed: make(chan struct{}),
summary: &Summary{},