Skip to content

Commit 711c9b7

Browse files
damneveryeya24
authored andcommitted
Catch context error in the s3 bucket client (cortexproject#5240)
Signed-off-by: Xiaochao Dong (@damnever) <[email protected]> Signed-off-by: Ben Ye <[email protected]>
1 parent 3e66504 commit 711c9b7

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
* [BUGFIX] Compactor: Fix issue that shuffle sharding planner return error if block is under visit by other compactor. #5188
6060
* [BUGFIX] Fix S3 BucketWithRetries upload empty content issue #5217
6161
* [BUGFIX] Query Frontend: Disable `absent`, `absent_over_time` and `scalar` for vertical sharding. #5221
62+
* [BUGFIX] Catch context error in the s3 bucket client. #5240
6263

6364
## 1.14.0 2022-12-02
6465

pkg/storage/bucket/s3/bucket_client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (b *BucketWithRetries) retry(ctx context.Context, f func() error, operation
124124
level.Error(b.logger).Log("msg", "bucket operation fail after retries", "err", lastErr, "operation", operationInfo)
125125
return lastErr
126126
}
127-
return nil
127+
return retries.Err()
128128
}
129129

130130
func (b *BucketWithRetries) Name() string {

pkg/storage/bucket/s3/bucket_client_test.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,25 @@ func TestBucketWithRetries_UploadFailed(t *testing.T) {
7373
require.ErrorContains(t, err, "failed upload: ")
7474
}
7575

76+
func TestBucketWithRetries_ContextCanceled(t *testing.T) {
77+
t.Parallel()
78+
79+
m := mockBucket{}
80+
b := BucketWithRetries{
81+
logger: log.NewNopLogger(),
82+
bucket: &m,
83+
operationRetries: 5,
84+
retryMinBackoff: 10 * time.Millisecond,
85+
retryMaxBackoff: time.Second,
86+
}
87+
88+
ctx, cancel := context.WithCancel(context.Background())
89+
cancel()
90+
obj, err := b.GetRange(ctx, "dummy", 0, 10)
91+
require.ErrorIs(t, err, context.Canceled)
92+
require.Nil(t, obj)
93+
}
94+
7695
type fakeReader struct {
7796
}
7897

@@ -121,7 +140,7 @@ func (m *mockBucket) Get(ctx context.Context, name string) (io.ReadCloser, error
121140

122141
// GetRange mocks objstore.Bucket.GetRange()
123142
func (m *mockBucket) GetRange(ctx context.Context, name string, off, length int64) (io.ReadCloser, error) {
124-
return nil, nil
143+
return io.NopCloser(bytes.NewBuffer(bytes.Repeat([]byte{1}, int(length)))), nil
125144
}
126145

127146
// Exists mocks objstore.Bucket.Exists()

0 commit comments

Comments
 (0)