forked from TrueCloudLab/restic
backend/retry: hide final log for stat()
method
stat is only used to check the config file's existence. We don't want log output in this case.
This commit is contained in:
parent
74c783b850
commit
58dc4a6892
2 changed files with 13 additions and 2 deletions
|
@ -221,12 +221,19 @@ func (be *Backend) Load(ctx context.Context, h backend.Handle, length int, offse
|
|||
|
||||
// Stat returns information about the File identified by h.
|
||||
func (be *Backend) Stat(ctx context.Context, h backend.Handle) (fi backend.FileInfo, err error) {
|
||||
err = be.retry(ctx, fmt.Sprintf("Stat(%v)", h),
|
||||
// see the call to `cancel()` below for why this context exists
|
||||
statCtx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
|
||||
err = be.retry(statCtx, fmt.Sprintf("Stat(%v)", h),
|
||||
func() error {
|
||||
var innerError error
|
||||
fi, innerError = be.Backend.Stat(ctx, h)
|
||||
|
||||
if be.Backend.IsNotExist(innerError) {
|
||||
// stat is only used to check the existence of the config file.
|
||||
// cancel the context to suppress the final error message if the file is not found.
|
||||
cancel()
|
||||
// do not retry if file is not found, as stat is usually used to check whether a file exists
|
||||
return backoff.Permanent(innerError)
|
||||
}
|
||||
|
|
|
@ -400,7 +400,11 @@ func TestBackendStatNotExists(t *testing.T) {
|
|||
}
|
||||
|
||||
TestFastRetries(t)
|
||||
retryBackend := New(be, 10, nil, nil)
|
||||
retryBackend := New(be, 10, func(s string, err error, d time.Duration) {
|
||||
t.Fatalf("unexpected error output %v", s)
|
||||
}, func(s string, i int) {
|
||||
t.Fatalf("unexpected log output %v", s)
|
||||
})
|
||||
|
||||
_, err := retryBackend.Stat(context.TODO(), backend.Handle{})
|
||||
test.Assert(t, be.IsNotExistFn(err), "unexpected error %v", err)
|
||||
|
|
Loading…
Reference in a new issue