forked from TrueCloudLab/restic
da48b925ff
I was running "golangci-lint" and found this two warnings internal/checker/checker.go:135:18: (*Checker).LoadIndex$3 - result 0 (error) is always nil (unparam) final := func() error { ^ internal/repository/repository.go:457:18: (*Repository).LoadIndex$3 - result 0 (error) is always nil (unparam) final := func() error { ^ It turns out that these functions are used only in "RunWorkers(...)", which is used only two times in whole project right after this "final" functions. And because these "final" functions always return "nil", I've descided, that it would be better to remove requriments for "final" func to return error to avoid magick "return nil" at their end.
33 lines
741 B
Go
33 lines
741 B
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
"golang.org/x/sync/errgroup"
|
|
)
|
|
|
|
// RunWorkers runs count instances of workerFunc using an errgroup.Group.
|
|
// After all workers have terminated, finalFunc is run. If an error occurs in
|
|
// one of the workers, it is returned. FinalFunc is always run, regardless of
|
|
// any other previous errors.
|
|
func RunWorkers(ctx context.Context, count int, workerFunc func() error, finalFunc func()) error {
|
|
wg, ctx := errgroup.WithContext(ctx)
|
|
|
|
// run workers
|
|
for i := 0; i < count; i++ {
|
|
wg.Go(workerFunc)
|
|
}
|
|
|
|
// wait for termination
|
|
err := wg.Wait()
|
|
|
|
// make sure finalFunc is run
|
|
finalFunc()
|
|
|
|
// if the workers returned an error, return it to the caller
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|