Skip to content

Commit 4a3fead

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

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

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: 1 addition & 1 deletion
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, bucketindex.ErrCustomerManagedKeyError) {
7272
f.metrics.SyncFailures.Inc()
7373
}
7474
}()

pkg/storegateway/bucket_stores_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
"testing"
1414
"time"
1515

16+
"github.com/cortexproject/cortex/pkg/storage/tsdb/bucketindex"
17+
cortex_testutil "github.com/cortexproject/cortex/pkg/storage/tsdb/testutil"
1618
"github.com/go-kit/log"
1719
"github.com/oklog/ulid"
1820
"github.com/prometheus/client_golang/prometheus"
@@ -40,6 +42,51 @@ import (
4042
"github.com/cortexproject/cortex/pkg/util/flagext"
4143
)
4244

45+
func TestBucketStores_CustomerKeyError(t *testing.T) {
46+
userToMetric := map[string]string{
47+
"user-1": "series_1",
48+
"user-2": "series_2",
49+
}
50+
51+
ctx := context.Background()
52+
cfg := prepareStorageConfig(t)
53+
cfg.BucketStore.BucketIndex.Enabled = true
54+
55+
storageDir := t.TempDir()
56+
57+
for userID, metricName := range userToMetric {
58+
generateStorageBlock(t, storageDir, userID, metricName, 10, 100, 15)
59+
}
60+
61+
bucket, err := filesystem.NewBucketClient(filesystem.Config{Directory: storageDir})
62+
63+
mBucket := &cortex_testutil.MockBucketFailure{
64+
Bucket: bucket,
65+
GetFailures: map[string]error{
66+
"user-1": cortex_testutil.ErrKeyAccessDeniedError,
67+
},
68+
}
69+
require.NoError(t, err)
70+
71+
reg := prometheus.NewPedanticRegistry()
72+
stores, err := NewBucketStores(cfg, NewNoShardingStrategy(), mBucket, defaultLimitsOverrides(t), mockLoggingLevel(), log.NewNopLogger(), reg)
73+
require.NoError(t, err)
74+
75+
// Should set the error on user-1
76+
require.NoError(t, stores.InitialSync(ctx))
77+
require.ErrorIs(t, stores.stores["user-1"].err, bucketindex.ErrCustomerManagedKeyError)
78+
require.ErrorIs(t, stores.stores["user-2"].err, nil)
79+
require.NoError(t, stores.SyncBlocks(context.Background()))
80+
require.ErrorIs(t, stores.stores["user-1"].err, bucketindex.ErrCustomerManagedKeyError)
81+
require.ErrorIs(t, stores.stores["user-2"].err, nil)
82+
83+
// Cleaning the error
84+
mBucket.GetFailures = map[string]error{}
85+
require.NoError(t, stores.SyncBlocks(context.Background()))
86+
require.ErrorIs(t, stores.stores["user-1"].err, nil)
87+
require.ErrorIs(t, stores.stores["user-2"].err, nil)
88+
}
89+
4390
func TestBucketStores_InitialSync(t *testing.T) {
4491
t.Parallel()
4592
userToMetric := map[string]string{

0 commit comments

Comments
 (0)