Skip to content

Commit 3b84671

Browse files
authored
Catch context error in the s3 bucket client (#5240)
Signed-off-by: Xiaochao Dong (@damnever) <[email protected]>
1 parent 9e99c41 commit 3b84671

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
@@ -4,6 +4,7 @@
44
* [CHANGE] Store gateways summary metrics have been converted to histograms `cortex_bucket_store_series_blocks_queried`, `cortex_bucket_store_series_data_fetched`, `cortex_bucket_store_series_data_size_touched_bytes`, `cortex_bucket_store_series_data_size_fetched_bytes`, `cortex_bucket_store_series_data_touched`, `cortex_bucket_store_series_result_series` #5239
55

66
* [ENHANCEMENT] Querier: Batch Iterator optimization to prevent transversing it multiple times query ranges steps does not overlap. #5237
7+
* [BUGFIX] Catch context error in the s3 bucket client. #5240
78

89
## 1.15.0 in progress
910

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)