Skip to content

Commit 6ebd273

Browse files
committed
Create a new span per querier
1 parent 3a3cb4b commit 6ebd273

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

pkg/querier/tenantfederation/merge_queryable.go

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,43 @@ func NewQueryable(upstream storage.Queryable, byPassWithSingleQuerier bool) stor
4141
}
4242

4343
func tenantQuerierCallback(queryable storage.Queryable) MergeQuerierCallback {
44-
return func(ctx context.Context, mint int64, maxt int64) ([]string, []storage.Querier, error) {
44+
return func(ctx context.Context, mint int64, maxt int64) ([]string, []storage.Querier, func(), error) {
4545
tenantIDs, err := tenant.TenantIDs(ctx)
4646
if err != nil {
47-
return nil, nil, err
47+
return nil, nil, nil, err
4848
}
4949

50+
var spans = make([]*spanlogger.SpanLogger, len(tenantIDs))
51+
5052
var queriers = make([]storage.Querier, len(tenantIDs))
5153
for pos, tenantID := range tenantIDs {
54+
sctx := user.InjectOrgID(ctx, tenantID)
55+
spans[pos], sctx = spanlogger.New(sctx, "mergeQuerier.NewQuerier")
56+
5257
q, err := queryable.Querier(
53-
user.InjectOrgID(ctx, tenantID),
58+
sctx,
5459
mint,
5560
maxt,
5661
)
5762
if err != nil {
58-
return nil, nil, err
63+
return nil, nil, nil, err
5964
}
6065
queriers[pos] = q
6166
}
6267

63-
return tenantIDs, queriers, nil
68+
closer := func() {
69+
for _, span := range spans {
70+
span.Finish()
71+
}
72+
}
73+
74+
return tenantIDs, queriers, closer, nil
6475
}
6576
}
6677

6778
// MergeQuerierCallback returns the underlying queriers and their IDs relevant
6879
// for the query.
69-
type MergeQuerierCallback func(ctx context.Context, mint int64, maxt int64) (ids []string, queriers []storage.Querier, err error)
80+
type MergeQuerierCallback func(ctx context.Context, mint int64, maxt int64) (ids []string, queriers []storage.Querier, closer func(), err error)
7081

7182
// NewMergeQueryable returns a queryable that merges results from multiple
7283
// underlying Queryables. The underlying queryables and its label values to be
@@ -100,7 +111,7 @@ func (m *mergeQueryable) Querier(ctx context.Context, mint int64, maxt int64) (s
100111
// TODO: it's necessary to think how to override context inside querier
101112
// to mark spans created inside querier as child of a span created inside
102113
// methods of merged querier.
103-
ids, queriers, err := m.callback(ctx, mint, maxt)
114+
ids, queriers, closer, err := m.callback(ctx, mint, maxt)
104115
if err != nil {
105116
return nil, err
106117
}
@@ -115,6 +126,7 @@ func (m *mergeQueryable) Querier(ctx context.Context, mint int64, maxt int64) (s
115126
idLabelName: m.idLabelName,
116127
queriers: queriers,
117128
ids: ids,
129+
closer: closer,
118130
}, nil
119131
}
120132

@@ -129,6 +141,7 @@ type mergeQuerier struct {
129141
queriers []storage.Querier
130142
idLabelName string
131143
ids []string
144+
closer func()
132145
}
133146

134147
// LabelValues returns all potential values for a label name. It is not safe
@@ -262,6 +275,7 @@ func (m *mergeQuerier) mergeDistinctStringSlice(f stringSliceFunc) ([]string, st
262275

263276
// Close releases the resources of the Querier.
264277
func (m *mergeQuerier) Close() error {
278+
m.closer()
265279
errs := tsdb_errors.NewMulti()
266280
for pos, id := range m.ids {
267281
errs.Add(errors.Wrapf(m.queriers[pos].Close(), "failed to close querier for %s %s", rewriteLabelName(m.idLabelName), id))

0 commit comments

Comments
 (0)