Skip to content

Commit 4e41744

Browse files
fix: do not retain span logger created with index set initialized at query time (#14027)
1 parent bf60455 commit 4e41744

File tree

3 files changed

+12
-14
lines changed

3 files changed

+12
-14
lines changed

‎pkg/storage/stores/shipper/indexshipper/downloads/index_set.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/grafana/loki/v3/pkg/storage/chunk/client/util"
2121
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/index"
2222
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/storage"
23-
util_log "github.com/grafana/loki/v3/pkg/util/log"
2423
"github.com/grafana/loki/v3/pkg/util/spanlogger"
2524
)
2625

@@ -32,7 +31,7 @@ const (
3231
var errIndexListCacheTooStale = fmt.Errorf("index list cache too stale")
3332

3433
type IndexSet interface {
35-
Init(forQuerying bool) error
34+
Init(forQuerying bool, logger log.Logger) error
3635
Close()
3736
ForEach(ctx context.Context, callback index.ForEachIndexCallback) error
3837
ForEachConcurrent(ctx context.Context, callback index.ForEachIndexCallback) error
@@ -94,14 +93,12 @@ func NewIndexSet(tableName, userID, cacheLocation string, baseIndexSet storage.I
9493
}
9594

9695
// Init downloads all the db files for the table from object storage.
97-
func (t *indexSet) Init(forQuerying bool) (err error) {
96+
func (t *indexSet) Init(forQuerying bool, logger log.Logger) (err error) {
9897
// Using background context to avoid cancellation of download when request times out.
9998
// We would anyways need the files for serving next requests.
10099
ctx := context.Background()
101100
ctx, t.cancelFunc = context.WithTimeout(ctx, downloadTimeout)
102101

103-
logger, ctx := spanlogger.NewWithLogger(ctx, t.logger, "indexSet.Init")
104-
105102
defer func() {
106103
if err != nil {
107104
level.Error(logger).Log("msg", "failed to initialize table, cleaning it up", "table", t.tableName, "err", err)
@@ -186,7 +183,7 @@ func (t *indexSet) ForEach(ctx context.Context, callback index.ForEachIndexCallb
186183
}
187184
defer t.indexMtx.rUnlock()
188185

189-
logger := util_log.WithContext(ctx, t.logger)
186+
logger := spanlogger.FromContextWithFallback(ctx, t.logger)
190187
level.Debug(logger).Log("index-files-count", len(t.index))
191188

192189
for _, idx := range t.index {
@@ -205,7 +202,7 @@ func (t *indexSet) ForEachConcurrent(ctx context.Context, callback index.ForEach
205202
}
206203
defer t.indexMtx.rUnlock()
207204

208-
logger := util_log.WithContext(ctx, t.logger)
205+
logger := spanlogger.FromContextWithFallback(ctx, t.logger)
209206
level.Debug(logger).Log("index-files-count", len(t.index))
210207

211208
if len(t.index) == 0 {

‎pkg/storage/stores/shipper/indexshipper/downloads/index_set_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func buildTestIndexSet(t *testing.T, userID, path string) (*indexSet, stopFunc)
2626
}, util_log.Logger)
2727
require.NoError(t, err)
2828

29-
require.NoError(t, idxSet.Init(false))
29+
require.NoError(t, idxSet.Init(false, util_log.Logger))
3030

3131
return idxSet.(*indexSet), idxSet.Close
3232
}

‎pkg/storage/stores/shipper/indexshipper/downloads/table.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,14 @@ func LoadTable(name, cacheLocation string, storageClient storage.Client, openInd
109109
}
110110

111111
userID := entry.Name()
112+
logger := loggerWithUserID(table.logger, userID)
112113
userIndexSet, err := NewIndexSet(name, userID, filepath.Join(cacheLocation, userID),
113-
table.baseUserIndexSet, openIndexFileFunc, loggerWithUserID(table.logger, userID))
114+
table.baseUserIndexSet, openIndexFileFunc, logger)
114115
if err != nil {
115116
return nil, err
116117
}
117118

118-
err = userIndexSet.Init(false)
119+
err = userIndexSet.Init(false, logger)
119120
if err != nil {
120121
return nil, err
121122
}
@@ -129,7 +130,7 @@ func LoadTable(name, cacheLocation string, storageClient storage.Client, openInd
129130
return nil, err
130131
}
131132

132-
err = commonIndexSet.Init(false)
133+
err = commonIndexSet.Init(false, table.logger)
133134
if err != nil {
134135
return nil, err
135136
}
@@ -287,7 +288,7 @@ func (t *table) Sync(ctx context.Context) error {
287288
// forQuerying must be set to true only getting the index for querying since
288289
// it captures the amount of time it takes to download the index at query time.
289290
func (t *table) getOrCreateIndexSet(ctx context.Context, id string, forQuerying bool) (IndexSet, error) {
290-
logger := spanlogger.FromContextWithFallback(ctx, log.With(t.logger, "user", id, "table", t.name))
291+
logger := spanlogger.FromContextWithFallback(ctx, loggerWithUserID(t.logger, id))
291292

292293
t.indexSetsMtx.RLock()
293294
indexSet, ok := t.indexSets[id]
@@ -311,7 +312,7 @@ func (t *table) getOrCreateIndexSet(ctx context.Context, id string, forQuerying
311312
}
312313

313314
// instantiate the index set, add it to the map
314-
indexSet, err = NewIndexSet(t.name, id, filepath.Join(t.cacheLocation, id), baseIndexSet, t.openIndexFileFunc, logger)
315+
indexSet, err = NewIndexSet(t.name, id, filepath.Join(t.cacheLocation, id), baseIndexSet, t.openIndexFileFunc, loggerWithUserID(t.logger, id))
315316
if err != nil {
316317
return nil, err
317318
}
@@ -321,7 +322,7 @@ func (t *table) getOrCreateIndexSet(ctx context.Context, id string, forQuerying
321322
// it is up to the caller to wait for its readiness using IndexSet.AwaitReady()
322323
go func() {
323324
start := time.Now()
324-
err := indexSet.Init(forQuerying)
325+
err := indexSet.Init(forQuerying, logger)
325326
duration := time.Since(start)
326327

327328
level.Info(logger).Log("msg", "init index set", "duration", duration, "success", err == nil)

0 commit comments

Comments
 (0)