Skip to content

Commit ef2a51d

Browse files
authored
Fix sync bucket index status (cortexproject#5519)
Signed-off-by: Alan Protasio <[email protected]>
1 parent 526a6d9 commit ef2a51d

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

pkg/storage/tsdb/bucketindex/loader.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,19 @@ func (l *Loader) GetIndex(ctx context.Context, userID string) (*Index, Status, e
105105
}
106106
l.indexesMx.RUnlock()
107107

108+
ss, err := ReadSyncStatus(ctx, l.bkt, userID, l.logger)
109+
110+
if err != nil {
111+
level.Warn(l.logger).Log("msg", "unable to read bucket index status", "user", userID, "err", err)
112+
}
113+
108114
startTime := time.Now()
109115
l.loadAttempts.Inc()
110116
idx, err := ReadIndex(ctx, l.bkt, userID, l.cfgProvider, l.logger)
111117
if err != nil {
112118
// Cache the error, to avoid hammering the object store in case of persistent issues
113119
// (eg. corrupted bucket index or not existing).
114-
l.cacheIndex(userID, nil, UnknownStatus, err)
120+
l.cacheIndex(userID, nil, ss, err)
115121

116122
if errors.Is(err, ErrIndexNotFound) {
117123
level.Warn(l.logger).Log("msg", "bucket index not found", "user", userID)
@@ -124,13 +130,7 @@ func (l *Loader) GetIndex(ctx context.Context, userID string) (*Index, Status, e
124130
level.Error(l.logger).Log("msg", "unable to load bucket index", "user", userID, "err", err)
125131
}
126132

127-
return nil, UnknownStatus, err
128-
}
129-
130-
ss, err := ReadSyncStatus(ctx, l.bkt, userID, l.logger)
131-
132-
if err != nil {
133-
level.Warn(l.logger).Log("msg", "unable to read bucket index status", "user", userID, "err", err)
133+
return nil, ss, err
134134
}
135135

136136
// Cache the index.

pkg/storage/tsdb/bucketindex/loader_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ func TestLoader_ShouldOffloadIndexIfIdleTimeoutIsReachedDuringBackgroundUpdates(
575575
))
576576
}
577577

578-
func TestLoader_ShouldUpdateIndexInBackgroundOnPreviousKeyAcessDenied(t *testing.T) {
578+
func TestLoader_ShouldUpdateIndexInBackgroundOnPreviousKeyAccessDenied(t *testing.T) {
579579
user := "user-1"
580580
ctx := context.Background()
581581
reg := prometheus.NewPedanticRegistry()
@@ -602,12 +602,28 @@ func TestLoader_ShouldUpdateIndexInBackgroundOnPreviousKeyAcessDenied(t *testing
602602
require.NoError(t, services.StopAndAwaitTerminated(ctx, loader))
603603
})
604604

605-
_, _, err := loader.GetIndex(ctx, user)
605+
_, ss, err := loader.GetIndex(ctx, user)
606606
require.True(t, errors.Is(err, bucket.ErrCustomerManagedKeyAccessDenied))
607+
require.Equal(t, Unknown, ss.Status)
608+
609+
// Verify is the index sync status is being returned
610+
ss.Status = CustomerManagedKeyError
611+
ss.NonQueryableReason = CustomerManagedKeyError
612+
WriteSyncStatus(ctx, bkt, user, ss, log.NewNopLogger())
613+
614+
// Check not cached
615+
loader.deleteCachedIndex(user)
616+
_, ss, err = loader.GetIndex(ctx, user)
617+
require.True(t, errors.Is(err, bucket.ErrCustomerManagedKeyAccessDenied))
618+
require.Equal(t, CustomerManagedKeyError, ss.Status)
607619

608620
// Check cached
609621
require.NoError(t, loader.checkCachedIndexes(ctx))
610622

623+
_, ss, err = loader.GetIndex(ctx, user)
624+
require.True(t, errors.Is(err, bucket.ErrCustomerManagedKeyAccessDenied))
625+
require.Equal(t, CustomerManagedKeyError, ss.Status)
626+
611627
loader.bkt = bkt
612628

613629
// Upload the bucket index.

0 commit comments

Comments
 (0)