Skip to content

Commit d182d95

Browse files
committed
Implementing error handling on labels apis
Signed-off-by: Alan Protasio <[email protected]>
1 parent 465da07 commit d182d95

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

pkg/storegateway/bucket_stores.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,12 @@ func (u *BucketStores) LabelNames(ctx context.Context, req *storepb.LabelNamesRe
335335
return &storepb.LabelNamesResponse{}, nil
336336
}
337337

338+
err := u.getStoreError(userID)
339+
340+
if err != nil && errors.Is(err, bucket.ErrCustomerManagedKeyError) {
341+
return nil, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", err)
342+
}
343+
338344
return store.LabelNames(ctx, req)
339345
}
340346

@@ -353,6 +359,12 @@ func (u *BucketStores) LabelValues(ctx context.Context, req *storepb.LabelValues
353359
return &storepb.LabelValuesResponse{}, nil
354360
}
355361

362+
err := u.getStoreError(userID)
363+
364+
if err != nil && errors.Is(err, bucket.ErrCustomerManagedKeyError) {
365+
return nil, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", err)
366+
}
367+
356368
return store.LabelValues(ctx, req)
357369
}
358370

pkg/storegateway/bucket_stores_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,16 @@ func TestBucketStores_CustomerKeyError(t *testing.T) {
8484

8585
_, _, err = querySeries(stores, "user-1", "anything", 0, 100)
8686
require.Equal(t, err, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", bucket.ErrCustomerManagedKeyError))
87+
_, err = queryLabelsNames(stores, "user-1", "anything")
88+
require.Equal(t, err, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", bucket.ErrCustomerManagedKeyError))
89+
_, err = queryLabelsValues(stores, "user-1", "anything")
90+
require.Equal(t, err, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", bucket.ErrCustomerManagedKeyError))
8791
_, _, err = querySeries(stores, "user-2", "anything", 0, 100)
8892
require.NoError(t, err)
93+
_, err = queryLabelsNames(stores, "user-1", "anything")
94+
require.Equal(t, err, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", bucket.ErrCustomerManagedKeyError))
95+
_, err = queryLabelsValues(stores, "user-1", "anything")
96+
require.Equal(t, err, httpgrpc.Errorf(int(codes.ResourceExhausted), "store error: %s", bucket.ErrCustomerManagedKeyError))
8997

9098
// Cleaning the error
9199
mBucket.GetFailures = map[string]error{}
@@ -96,6 +104,10 @@ func TestBucketStores_CustomerKeyError(t *testing.T) {
96104
require.NoError(t, err)
97105
_, _, err = querySeries(stores, "user-2", "anything", 0, 100)
98106
require.NoError(t, err)
107+
_, err = queryLabelsNames(stores, "user-1", "anything")
108+
require.NoError(t, err)
109+
_, err = queryLabelsValues(stores, "user-1", "anything")
110+
require.NoError(t, err)
99111
}
100112

101113
func TestBucketStores_InitialSync(t *testing.T) {
@@ -487,6 +499,34 @@ func querySeries(stores *BucketStores, userID, metricName string, minT, maxT int
487499
return srv.SeriesSet, srv.Warnings, err
488500
}
489501

502+
func queryLabelsNames(stores *BucketStores, userID, metricName string) (*storepb.LabelNamesResponse, error) {
503+
req := &storepb.LabelNamesRequest{
504+
Matchers: []storepb.LabelMatcher{{
505+
Type: storepb.LabelMatcher_EQ,
506+
Name: labels.MetricName,
507+
Value: metricName,
508+
}},
509+
PartialResponseStrategy: storepb.PartialResponseStrategy_ABORT,
510+
}
511+
512+
ctx := setUserIDToGRPCContext(context.Background(), userID)
513+
return stores.LabelNames(ctx, req)
514+
}
515+
516+
func queryLabelsValues(stores *BucketStores, userID, metricName string) (*storepb.LabelValuesResponse, error) {
517+
req := &storepb.LabelValuesRequest{
518+
Matchers: []storepb.LabelMatcher{{
519+
Type: storepb.LabelMatcher_EQ,
520+
Name: labels.MetricName,
521+
Value: metricName,
522+
}},
523+
PartialResponseStrategy: storepb.PartialResponseStrategy_ABORT,
524+
}
525+
526+
ctx := setUserIDToGRPCContext(context.Background(), userID)
527+
return stores.LabelValues(ctx, req)
528+
}
529+
490530
func mockLoggingLevel() logging.Level {
491531
level := logging.Level{}
492532
err := level.Set("info")

0 commit comments

Comments
 (0)