2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-26 23:06:32 +00:00

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:
Michael Eischer 2024-10-17 20:35:26 +02:00
parent 74c783b850
commit 58dc4a6892
2 changed files with 13 additions and 2 deletions

View File

@ -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. // Stat returns information about the File identified by h.
func (be *Backend) Stat(ctx context.Context, h backend.Handle) (fi backend.FileInfo, err error) { 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 { func() error {
var innerError error var innerError error
fi, innerError = be.Backend.Stat(ctx, h) fi, innerError = be.Backend.Stat(ctx, h)
if be.Backend.IsNotExist(innerError) { 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 // do not retry if file is not found, as stat is usually used to check whether a file exists
return backoff.Permanent(innerError) return backoff.Permanent(innerError)
} }

View File

@ -400,7 +400,11 @@ func TestBackendStatNotExists(t *testing.T) {
} }
TestFastRetries(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{}) _, err := retryBackend.Stat(context.TODO(), backend.Handle{})
test.Assert(t, be.IsNotExistFn(err), "unexpected error %v", err) test.Assert(t, be.IsNotExistFn(err), "unexpected error %v", err)