Skip to content

Commit 526a6d9

Browse files
authored
Update Thanos objsstore (#5515)
* Fix 5xx when customer key error when fetching the bucket index Signed-off-by: Alan Protasio <alanprot@gmail.com> * update thanos obs store Signed-off-by: Alan Protasio <alanprot@gmail.com> * Update comments Signed-off-by: Alan Protasio <alanprot@gmail.com> --------- Signed-off-by: Alan Protasio <alanprot@gmail.com>
1 parent 1d40924 commit 526a6d9

27 files changed

+104
-88
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ require (
5151
github.com/sony/gobreaker v0.5.0
5252
github.com/spf13/afero v1.9.5
5353
github.com/stretchr/testify v1.8.4
54-
github.com/thanos-io/objstore v0.0.0-20230804084840-c042a6a16c58
54+
github.com/thanos-io/objstore v0.0.0-20230816175749-20395bffdf26
5555
github.com/thanos-io/promql-engine v0.0.0-20230816062837-c64fc7b373db
5656
github.com/thanos-io/thanos v0.0.0-20230816172224-2b4f2a7061f9
5757
github.com/uber/jaeger-client-go v2.30.0+incompatible

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,8 +1206,8 @@ github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNG
12061206
github.com/tencentyun/cos-go-sdk-v5 v0.7.40 h1:W6vDGKCHe4wBACI1d2UgE6+50sJFhRWU4O8IB2ozzxM=
12071207
github.com/thanos-community/galaxycache v0.0.0-20211122094458-3a32041a1f1e h1:f1Zsv7OAU9iQhZwigp50Yl38W10g/vd5NC8Rdk1Jzng=
12081208
github.com/thanos-community/galaxycache v0.0.0-20211122094458-3a32041a1f1e/go.mod h1:jXcofnrSln/cLI6/dhlBxPQZEEQHVPCcFaH75M+nSzM=
1209-
github.com/thanos-io/objstore v0.0.0-20230804084840-c042a6a16c58 h1:4cDXsvm3mb1NvW1B1qJ9/fy6h+OOYit0h8oVA957hLM=
1210-
github.com/thanos-io/objstore v0.0.0-20230804084840-c042a6a16c58/go.mod h1:oJ82xgcBDzGJrEgUsjlTj6n01+ZWUMMUR8BlZzX5xDE=
1209+
github.com/thanos-io/objstore v0.0.0-20230816175749-20395bffdf26 h1:q1lin/af0lw+I3sS79ccHs2CLjFOPc190J9saeQ5qQ4=
1210+
github.com/thanos-io/objstore v0.0.0-20230816175749-20395bffdf26/go.mod h1:oJ82xgcBDzGJrEgUsjlTj6n01+ZWUMMUR8BlZzX5xDE=
12111211
github.com/thanos-io/promql-engine v0.0.0-20230816062837-c64fc7b373db h1:05Tp4pfeTTJlRnwLtgvXCJvKYeZCRBoxwDFC+uYqGyM=
12121212
github.com/thanos-io/promql-engine v0.0.0-20230816062837-c64fc7b373db/go.mod h1:eIgPaXWgOhNAv6CPPrgu09r0AtT7byBTZy+7WkX0D18=
12131213
github.com/thanos-io/thanos v0.0.0-20230816172224-2b4f2a7061f9 h1:KuVECxBG1Q8WoYWlY8dk1wi3OtPSSxv+tWPV9S9qGFk=

pkg/storage/bucket/client_mock.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ func (m *ClientMock) IsObjNotFoundErr(err error) bool {
178178
return err == errObjectDoesNotExist
179179
}
180180

181-
// IsCustomerManagedKeyError mocks objstore.Bucket.IsCustomerManagedKeyError()
182-
func (m *ClientMock) IsCustomerManagedKeyError(err error) bool {
181+
// IsAccessDeniedErr mocks objstore.Bucket.IsAccessDeniedErr()
182+
func (m *ClientMock) IsAccessDeniedErr(err error) bool {
183183
return err == errKeyPermissionDenied
184184
}
185185

pkg/storage/bucket/prefixed_bucket_client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ func (b *PrefixedBucketClient) IsObjNotFoundErr(err error) bool {
7373
return b.bucket.IsObjNotFoundErr(err)
7474
}
7575

76-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
77-
func (b *PrefixedBucketClient) IsCustomerManagedKeyError(err error) bool {
78-
return b.bucket.IsCustomerManagedKeyError(err)
76+
// IsAccessDeniedErr returns true if access to object is denied.
77+
func (b *PrefixedBucketClient) IsAccessDeniedErr(err error) bool {
78+
return b.bucket.IsAccessDeniedErr(err)
7979
}
8080

8181
// Attributes returns attributes of the specified object.

pkg/storage/bucket/s3/bucket_client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func (b *BucketWithRetries) retry(ctx context.Context, f func() error, operation
126126
if lastErr == nil {
127127
return nil
128128
}
129-
if b.bucket.IsObjNotFoundErr(lastErr) || b.bucket.IsCustomerManagedKeyError(lastErr) {
129+
if b.bucket.IsObjNotFoundErr(lastErr) || b.bucket.IsAccessDeniedErr(lastErr) {
130130
return lastErr
131131
}
132132
retries.Wait()
@@ -209,8 +209,8 @@ func (b *BucketWithRetries) IsObjNotFoundErr(err error) bool {
209209
return b.bucket.IsObjNotFoundErr(err)
210210
}
211211

212-
func (b *BucketWithRetries) IsCustomerManagedKeyError(err error) bool {
213-
return b.bucket.IsCustomerManagedKeyError(err)
212+
func (b *BucketWithRetries) IsAccessDeniedErr(err error) bool {
213+
return b.bucket.IsAccessDeniedErr(err)
214214
}
215215

216216
func (b *BucketWithRetries) Close() error {

pkg/storage/bucket/s3/bucket_client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ func (m *mockBucket) IsObjNotFoundErr(err error) bool {
226226
return err == errNotFound
227227
}
228228

229-
// IsCustomerManagedKeyError mocks objstore.Bucket.IsCustomerManagedKeyError()
230-
func (m *mockBucket) IsCustomerManagedKeyError(err error) bool {
229+
// IsAccessDeniedErr mocks objstore.Bucket.IsAccessDeniedErr()
230+
func (m *mockBucket) IsAccessDeniedErr(err error) bool {
231231
return err == errKeyDenied
232232
}
233233

pkg/storage/bucket/sse_bucket_client.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (b *SSEBucketClient) Iter(ctx context.Context, dir string, f func(string) e
107107
func (b *SSEBucketClient) Get(ctx context.Context, name string) (io.ReadCloser, error) {
108108
r, err := b.bucket.Get(ctx, name)
109109

110-
if err != nil && b.IsCustomerManagedKeyError(err) {
110+
if err != nil && b.IsAccessDeniedErr(err) {
111111
// Store gateway will return the status if the returned error is an `status.Error`
112112
return nil, cortex_errors.WithCause(err, status.Error(codes.PermissionDenied, err.Error()))
113113
}
@@ -118,7 +118,7 @@ func (b *SSEBucketClient) Get(ctx context.Context, name string) (io.ReadCloser,
118118
// GetRange implements objstore.Bucket.
119119
func (b *SSEBucketClient) GetRange(ctx context.Context, name string, off, length int64) (io.ReadCloser, error) {
120120
r, err := b.bucket.GetRange(ctx, name, off, length)
121-
if err != nil && b.IsCustomerManagedKeyError(err) {
121+
if err != nil && b.IsAccessDeniedErr(err) {
122122
return nil, cortex_errors.WithCause(err, status.Error(codes.PermissionDenied, err.Error()))
123123
}
124124

@@ -135,13 +135,13 @@ func (b *SSEBucketClient) IsObjNotFoundErr(err error) bool {
135135
return b.bucket.IsObjNotFoundErr(err)
136136
}
137137

138-
// IsCustomerManagedKeyError implements objstore.Bucket.
139-
func (b *SSEBucketClient) IsCustomerManagedKeyError(err error) bool {
138+
// IsAccessDeniedErr implements objstore.Bucket.
139+
func (b *SSEBucketClient) IsAccessDeniedErr(err error) bool {
140140
// unwrap error
141141
if se, ok := err.(interface{ Err() error }); ok {
142-
return b.bucket.IsCustomerManagedKeyError(se.Err()) || b.bucket.IsCustomerManagedKeyError(err)
142+
return b.bucket.IsAccessDeniedErr(se.Err()) || b.bucket.IsAccessDeniedErr(err)
143143
}
144-
return b.bucket.IsCustomerManagedKeyError(err)
144+
return b.bucket.IsAccessDeniedErr(err)
145145
}
146146

147147
// Attributes implements objstore.Bucket.

pkg/storage/bucket/sse_bucket_client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func Test_shouldWrapSSeErrors(t *testing.T) {
116116
sseBkt := NewSSEBucketClient("user-1", bkt, cfgProvider)
117117

118118
_, err := sseBkt.Get(context.Background(), "Test")
119-
require.True(t, sseBkt.IsCustomerManagedKeyError(err))
119+
require.True(t, sseBkt.IsAccessDeniedErr(err))
120120
}
121121

122122
type mockTenantConfigProvider struct {

pkg/storage/tsdb/bucketindex/markers_bucket_client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ func (b *globalMarkersBucket) IsObjNotFoundErr(err error) bool {
100100
return b.parent.IsObjNotFoundErr(err)
101101
}
102102

103-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
104-
func (b *globalMarkersBucket) IsCustomerManagedKeyError(err error) bool {
105-
return b.parent.IsCustomerManagedKeyError(err)
103+
// IsAccessDeniedErr returns true if access to object is denied.
104+
func (b *globalMarkersBucket) IsAccessDeniedErr(err error) bool {
105+
return b.parent.IsAccessDeniedErr(err)
106106
}
107107

108108
// Attributes implements objstore.Bucket.

pkg/storage/tsdb/bucketindex/storage.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,13 @@ func ReadIndex(ctx context.Context, bkt objstore.Bucket, userID string, cfgProvi
7171
userBkt := bucket.NewUserBucketClient(userID, bkt, cfgProvider)
7272

7373
// Get the bucket index.
74-
reader, err := userBkt.WithExpectedErrs(tsdb.IsOneOfTheExpectedErrors(userBkt.IsCustomerManagedKeyError, userBkt.IsObjNotFoundErr)).Get(ctx, IndexCompressedFilename)
74+
reader, err := userBkt.WithExpectedErrs(tsdb.IsOneOfTheExpectedErrors(userBkt.IsAccessDeniedErr, userBkt.IsObjNotFoundErr)).Get(ctx, IndexCompressedFilename)
7575
if err != nil {
7676
if userBkt.IsObjNotFoundErr(err) {
7777
return nil, ErrIndexNotFound
7878
}
7979

80-
if userBkt.IsCustomerManagedKeyError(err) {
80+
if userBkt.IsAccessDeniedErr(err) {
8181
return nil, cortex_errors.WithCause(bucket.ErrCustomerManagedKeyAccessDenied, err)
8282
}
8383

0 commit comments

Comments
 (0)