Skip to content

Commit 7ee5d1a

Browse files
committed
add test on BucketStores
Signed-off-by: Alan Protasio <[email protected]>
1 parent 0738d98 commit 7ee5d1a

File tree

12 files changed

+76
-22
lines changed

12 files changed

+76
-22
lines changed

pkg/compactor/blocks_cleaner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ func (c *BlocksCleaner) cleanUser(ctx context.Context, userID string, firstRun b
325325
idx, err := bucketindex.ReadIndex(ctx, c.bucketClient, userID, c.cfgProvider, c.logger)
326326
if errors.Is(err, bucketindex.ErrIndexCorrupted) {
327327
level.Warn(userLogger).Log("msg", "found a corrupted bucket index, recreating it")
328-
} else if errors.Is(err, bucketindex.ErrCustomerManagedKeyError) {
328+
} else if errors.Is(err, bucket.ErrCustomerManagedKeyError) {
329329
// Give up cleaning if we get access denied
330330
level.Warn(userLogger).Log("msg", err.Error())
331331
return nil

pkg/querier/blocks_finder_bucket_index.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (f *BucketIndexBlocksFinder) GetBlocks(ctx context.Context, userID string,
6565
return nil, nil, nil
6666
}
6767

68-
if errors.Is(err, bucketindex.ErrCustomerManagedKeyError) {
68+
if errors.Is(err, bucket.ErrCustomerManagedKeyError) {
6969
return nil, nil, validation.AccessDeniedError(err.Error())
7070
}
7171

pkg/storage/bucket/client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ var (
4040
SupportedBackends = []string{S3, GCS, Azure, Swift, Filesystem}
4141

4242
ErrUnsupportedStorageBackend = errors.New("unsupported storage backend")
43+
44+
ErrCustomerManagedKeyError = errors.New("access denied: customer key")
4345
)
4446

4547
// Config holds configuration for accessing long-term storage.

pkg/storage/tsdb/bucketindex/loader.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func (l *Loader) GetIndex(ctx context.Context, userID string) (*Index, error) {
115115

116116
if errors.Is(err, ErrIndexNotFound) {
117117
level.Warn(l.logger).Log("msg", "bucket index not found", "user", userID)
118-
} else if errors.Is(err, ErrCustomerManagedKeyError) {
118+
} else if errors.Is(err, bucket.ErrCustomerManagedKeyError) {
119119
level.Warn(l.logger).Log("msg", "key access denied when reading bucket index", "user", userID)
120120
} else {
121121
// We don't track ErrIndexNotFound as failure because it's a legit case (eg. a tenant just
@@ -198,7 +198,7 @@ func (l *Loader) updateCachedIndex(ctx context.Context, userID string) {
198198
l.loadAttempts.Inc()
199199
startTime := time.Now()
200200
idx, err := ReadIndex(readCtx, l.bkt, userID, l.cfgProvider, l.logger)
201-
if err != nil && !errors.Is(err, ErrIndexNotFound) && !errors.Is(err, ErrCustomerManagedKeyError) {
201+
if err != nil && !errors.Is(err, ErrIndexNotFound) && !errors.Is(err, bucket.ErrCustomerManagedKeyError) {
202202
l.loadFailures.Inc()
203203
level.Warn(l.logger).Log("msg", "unable to update bucket index", "user", userID, "err", err)
204204
return

pkg/storage/tsdb/bucketindex/loader_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/cortexproject/cortex/pkg/storage/bucket"
1112
"github.com/go-kit/log"
1213
"github.com/oklog/ulid"
1314
"github.com/pkg/errors"
@@ -601,7 +602,7 @@ func TestLoader_ShouldUpdateIndexInBackgroundOnPreviousKeyAcessDenied(t *testing
601602
})
602603

603604
_, err := loader.GetIndex(ctx, user)
604-
require.True(t, errors.Is(err, ErrCustomerManagedKeyError))
605+
require.True(t, errors.Is(err, bucket.ErrCustomerManagedKeyError))
605606

606607
// Check cached
607608
require.NoError(t, loader.checkCachedIndexes(ctx))
@@ -667,7 +668,7 @@ func TestLoader_GetIndex_ShouldCacheKeyDeniedErrors(t *testing.T) {
667668
// Request the index multiple times.
668669
for i := 0; i < 10; i++ {
669670
_, err := loader.GetIndex(ctx, "user-1")
670-
require.True(t, errors.Is(err, ErrCustomerManagedKeyError))
671+
require.True(t, errors.Is(err, bucket.ErrCustomerManagedKeyError))
671672
}
672673

673674
// Ensure metrics have been updated accordingly.

pkg/storage/tsdb/bucketindex/storage.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ import (
1717
)
1818

1919
var (
20-
ErrIndexNotFound = errors.New("bucket index not found")
21-
ErrIndexCorrupted = errors.New("bucket index corrupted")
22-
ErrCustomerManagedKeyError = errors.New("access denied: customer key")
20+
ErrIndexNotFound = errors.New("bucket index not found")
21+
ErrIndexCorrupted = errors.New("bucket index corrupted")
2322
)
2423

2524
// ReadIndex reads, parses and returns a bucket index from the bucket.
@@ -34,7 +33,7 @@ func ReadIndex(ctx context.Context, bkt objstore.Bucket, userID string, cfgProvi
3433
}
3534

3635
if userBkt.IsCustomerManagedKeyError(err) {
37-
return nil, ErrCustomerManagedKeyError
36+
return nil, bucket.ErrCustomerManagedKeyError
3837
}
3938

4039
return nil, errors.Wrap(err, "read bucket index")

pkg/storage/tsdb/bucketindex/storage_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
"testing"
88

9+
"github.com/cortexproject/cortex/pkg/storage/bucket"
910
"github.com/go-kit/log"
1011
"github.com/stretchr/testify/assert"
1112
"github.com/stretchr/testify/require"
@@ -45,7 +46,7 @@ func TestReadIndex_ShouldReturnErrorIfKeyAccessDeniedErr(t *testing.T) {
4546
},
4647
}
4748
idx, err := ReadIndex(context.Background(), bkt, "user-1", nil, log.NewNopLogger())
48-
require.Equal(t, ErrCustomerManagedKeyError, err)
49+
require.Equal(t, bucket.ErrCustomerManagedKeyError, err)
4950
require.Nil(t, idx)
5051
}
5152

pkg/storage/tsdb/testutil/objstore.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"io"
66
"os"
7+
"strings"
78
"testing"
89

910
"github.com/pkg/errors"
@@ -46,6 +47,11 @@ func (m *MockBucketFailure) Delete(ctx context.Context, name string) error {
4647
}
4748

4849
func (m *MockBucketFailure) Get(ctx context.Context, name string) (io.ReadCloser, error) {
50+
for prefix, err := range m.GetFailures {
51+
if strings.HasPrefix(name, prefix) {
52+
return nil, err
53+
}
54+
}
4955
if e, ok := m.GetFailures[name]; ok {
5056
return nil, e
5157
}
@@ -58,7 +64,7 @@ func (m *MockBucketFailure) WithExpectedErrs(expectedFunc objstore.IsOpFailureEx
5864
return &MockBucketFailure{Bucket: ibkt.WithExpectedErrs(expectedFunc), DeleteFailures: m.DeleteFailures, GetFailures: m.GetFailures}
5965
}
6066

61-
return m.WithExpectedErrs(expectedFunc)
67+
return m
6268
}
6369

6470
func (m *MockBucketFailure) ReaderWithExpectedErrs(expectedFunc objstore.IsOpFailureExpectedFunc) objstore.BucketReader {

pkg/storegateway/bucket_index_metadata_fetcher.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (f *BucketIndexMetadataFetcher) Fetch(ctx context.Context) (metas map[ulid.
6868
start := time.Now()
6969
defer func() {
7070
f.metrics.SyncDuration.Observe(time.Since(start).Seconds())
71-
if err != nil {
71+
if err != nil && !errors.Is(err, bucket.ErrCustomerManagedKeyError) {
7272
f.metrics.SyncFailures.Inc()
7373
}
7474
}()
@@ -95,14 +95,14 @@ func (f *BucketIndexMetadataFetcher) Fetch(ctx context.Context) (metas map[ulid.
9595
return nil, nil, nil
9696
}
9797

98-
if errors.Is(err, bucketindex.ErrCustomerManagedKeyError) {
98+
if errors.Is(err, bucket.ErrCustomerManagedKeyError) {
9999
// stop the job and return the error
100100
// this error should be used to return Access Denied to the caller
101101
level.Error(f.logger).Log("msg", "bucket index key permission revoked", "user", f.userID, "err", err)
102102
f.metrics.Synced.WithLabelValues(keyAccessDenied).Set(1)
103103
f.metrics.Submit()
104104

105-
return nil, nil, bucketindex.ErrCustomerManagedKeyError
105+
return nil, nil, bucket.ErrCustomerManagedKeyError
106106
}
107107

108108
if err != nil {

pkg/storegateway/bucket_index_metadata_fetcher_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,11 @@ func TestBucketIndexMetadataFetcher_Fetch_KeyPermissionDenied(t *testing.T) {
106106
reg := prometheus.NewPedanticRegistry()
107107
ctx := context.Background()
108108

109-
bkt.MockGet(userID+"/bucket-index.json.gz", "c", bucketindex.ErrCustomerManagedKeyError)
109+
bkt.MockGet(userID+"/bucket-index.json.gz", "c", bucket.ErrCustomerManagedKeyError)
110110

111111
fetcher := NewBucketIndexMetadataFetcher(userID, bkt, NewNoShardingStrategy(), nil, log.NewNopLogger(), reg, nil)
112112
metas, _, err := fetcher.Fetch(ctx)
113-
require.ErrorIs(t, bucketindex.ErrCustomerManagedKeyError, err)
113+
require.ErrorIs(t, bucket.ErrCustomerManagedKeyError, err)
114114
assert.Empty(t, metas)
115115

116116
assert.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(`

0 commit comments

Comments
 (0)