Skip to content

Commit b207889

Browse files
authored
[refactor] Return start and end timestamps from FindTraceIDs in v2 api (#6770)
## Which problem is this PR solving? - Towards #6765 ## Description of the changes - This PR changes the API of `FindTraceIDs` from returning `[]pcommon.TraceID` to returning a `FindTraceIDsChunk` that contains the trace IDs along with `Start` and `End` fields that are meant to serve as hints for some storage backends (e.g Tempo) that can optimize the queries when given a time range. ## How was this change tested? - CI ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [x] I have signed all commits - [x] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `npm run lint` and `npm run test` --------- Signed-off-by: Mahad Zaryab <[email protected]>
1 parent f956540 commit b207889

File tree

8 files changed

+63
-37
lines changed

8 files changed

+63
-37
lines changed

cmd/jaeger/internal/integration/trace_reader.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"math"
1313
"strings"
1414

15-
"go.opentelemetry.io/collector/pdata/pcommon"
1615
"go.opentelemetry.io/collector/pdata/ptrace"
1716
"go.uber.org/zap"
1817
"google.golang.org/grpc"
@@ -138,7 +137,7 @@ func (r *traceReader) FindTraces(
138137
func (*traceReader) FindTraceIDs(
139138
_ context.Context,
140139
_ tracestore.TraceQueryParams,
141-
) iter.Seq2[[]pcommon.TraceID, error] {
140+
) iter.Seq2[[]tracestore.FoundTraceID, error] {
142141
panic("not implemented")
143142
}
144143

internal/storage/v2/api/tracestore/mocks/Reader.go

Lines changed: 4 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/storage/v2/api/tracestore/reader.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ type Reader interface {
6161
// of matching trace IDs. This is useful in some contexts, such as batch jobs, where a
6262
// large list of trace IDs may be queried first and then the full traces are loaded
6363
// in batches.
64-
FindTraceIDs(ctx context.Context, query TraceQueryParams) iter.Seq2[[]pcommon.TraceID, error]
64+
FindTraceIDs(ctx context.Context, query TraceQueryParams) iter.Seq2[[]FoundTraceID, error]
6565
}
6666

6767
// GetTraceParams contains single-trace parameters for a GetTraces request.
@@ -88,6 +88,19 @@ type TraceQueryParams struct {
8888
NumTraces int
8989
}
9090

91+
// FoundTraceID is a wrapper around trace ID returned from FindTraceIDs
92+
// with an optional time range that may be used in GetTraces calls.
93+
//
94+
// The time range is provided as an optimization hint for some storage backends
95+
// that can perform more efficient queries when they know the approximate time range.
96+
// The value should not be used for precise time-based filtering or assumptions.
97+
// It is meant as a rough boundary and may not be populated in all cases.
98+
type FoundTraceID struct {
99+
TraceID pcommon.TraceID
100+
Start time.Time
101+
End time.Time
102+
}
103+
91104
func (t *TraceQueryParams) ToSpanStoreQueryParameters() *spanstore.TraceQueryParameters {
92105
return &spanstore.TraceQueryParameters{
93106
ServiceName: t.ServiceName,

internal/storage/v2/v1adapter/spanreader_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ func TestSpanReader_FindTraceIDs(t *testing.T) {
336336
name string
337337
query *spanstore.TraceQueryParameters
338338
expectedQuery tracestore.TraceQueryParams
339-
traceIDs []pcommon.TraceID
339+
traceIDs []tracestore.FoundTraceID
340340
expectedTraceIDs []model.TraceID
341341
err error
342342
expectedErr error
@@ -360,7 +360,7 @@ func TestSpanReader_FindTraceIDs(t *testing.T) {
360360
expectedQuery: tracestore.TraceQueryParams{
361361
ServiceName: "service1",
362362
},
363-
traceIDs: []pcommon.TraceID{},
363+
traceIDs: []tracestore.FoundTraceID{},
364364
expectedTraceIDs: nil,
365365
},
366366
{
@@ -371,9 +371,13 @@ func TestSpanReader_FindTraceIDs(t *testing.T) {
371371
expectedQuery: tracestore.TraceQueryParams{
372372
ServiceName: "service1",
373373
},
374-
traceIDs: []pcommon.TraceID{
375-
pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2}),
376-
pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4}),
374+
traceIDs: []tracestore.FoundTraceID{
375+
{
376+
TraceID: [16]byte{0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2},
377+
},
378+
{
379+
TraceID: [16]byte{0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4},
380+
},
377381
},
378382
expectedTraceIDs: []model.TraceID{
379383
model.NewTraceID(1, 2),
@@ -385,7 +389,7 @@ func TestSpanReader_FindTraceIDs(t *testing.T) {
385389
for _, test := range tests {
386390
tr := tracestoremocks.Reader{}
387391
tr.On("FindTraceIDs", mock.Anything, test.expectedQuery).
388-
Return(iter.Seq2[[]pcommon.TraceID, error](func(yield func([]pcommon.TraceID, error) bool) {
392+
Return(iter.Seq2[[]tracestore.FoundTraceID, error](func(yield func([]tracestore.FoundTraceID, error) bool) {
389393
yield(test.traceIDs, test.err)
390394
})).Once()
391395

internal/storage/v2/v1adapter/tracereader.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"errors"
99
"iter"
1010

11-
"go.opentelemetry.io/collector/pdata/pcommon"
1211
"go.opentelemetry.io/collector/pdata/ptrace"
1312

1413
"github.com/jaegertracing/jaeger-idl/model/v1"
@@ -113,16 +112,18 @@ func (tr *TraceReader) FindTraces(
113112
func (tr *TraceReader) FindTraceIDs(
114113
ctx context.Context,
115114
query tracestore.TraceQueryParams,
116-
) iter.Seq2[[]pcommon.TraceID, error] {
117-
return func(yield func([]pcommon.TraceID, error) bool) {
115+
) iter.Seq2[[]tracestore.FoundTraceID, error] {
116+
return func(yield func([]tracestore.FoundTraceID, error) bool) {
118117
traceIDs, err := tr.spanReader.FindTraceIDs(ctx, query.ToSpanStoreQueryParameters())
119118
if err != nil {
120119
yield(nil, err)
121120
return
122121
}
123-
otelIDs := make([]pcommon.TraceID, 0, len(traceIDs))
122+
otelIDs := make([]tracestore.FoundTraceID, 0, len(traceIDs))
124123
for _, traceID := range traceIDs {
125-
otelIDs = append(otelIDs, FromV1TraceID(traceID))
124+
otelIDs = append(otelIDs, tracestore.FoundTraceID{
125+
TraceID: FromV1TraceID(traceID),
126+
})
126127
}
127128
yield(otelIDs, nil)
128129
}

internal/storage/v2/v1adapter/tracereader_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ func TestTraceReader_FindTraceIDsDelegatesResponse(t *testing.T) {
404404
tests := []struct {
405405
name string
406406
modelTraceIDs []model.TraceID
407-
expectedTraceIDs []pcommon.TraceID
407+
expectedTraceIDs []tracestore.FoundTraceID
408408
err error
409409
}{
410410
{
@@ -413,9 +413,13 @@ func TestTraceReader_FindTraceIDsDelegatesResponse(t *testing.T) {
413413
{Low: 3, High: 2},
414414
{Low: 4, High: 3},
415415
},
416-
expectedTraceIDs: []pcommon.TraceID{
417-
pcommon.TraceID([]byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3}),
418-
pcommon.TraceID([]byte{0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4}),
416+
expectedTraceIDs: []tracestore.FoundTraceID{
417+
{
418+
TraceID: pcommon.TraceID([]byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3}),
419+
},
420+
{
421+
TraceID: pcommon.TraceID([]byte{0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4}),
422+
},
419423
},
420424
},
421425
{

internal/storage/v2/v1adapter/translator.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/jaegertracing/jaeger-idl/model/v1"
1414
"github.com/jaegertracing/jaeger/internal/jptrace"
15+
"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
1516
)
1617

1718
// V1BatchesFromTraces converts OpenTelemetry traces (ptrace.Traces)
@@ -62,18 +63,18 @@ func V1TracesFromSeq2(otelSeq iter.Seq2[[]ptrace.Traces, error]) ([]*model.Trace
6263
return jaegerTraces, nil
6364
}
6465

65-
func V1TraceIDsFromSeq2(traceIDsIter iter.Seq2[[]pcommon.TraceID, error]) ([]model.TraceID, error) {
66+
func V1TraceIDsFromSeq2(traceIDsIter iter.Seq2[[]tracestore.FoundTraceID, error]) ([]model.TraceID, error) {
6667
var (
6768
iterErr error
6869
modelTraceIDs []model.TraceID
6970
)
70-
traceIDsIter(func(traceIDs []pcommon.TraceID, err error) bool {
71+
traceIDsIter(func(traceIDs []tracestore.FoundTraceID, err error) bool {
7172
if err != nil {
7273
iterErr = err
7374
return false
7475
}
7576
for _, traceID := range traceIDs {
76-
modelTraceIDs = append(modelTraceIDs, ToV1TraceID(traceID))
77+
modelTraceIDs = append(modelTraceIDs, ToV1TraceID(traceID.TraceID))
7778
}
7879
return true
7980
})

internal/storage/v2/v1adapter/translator_test.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616

1717
"github.com/jaegertracing/jaeger-idl/model/v1"
1818
"github.com/jaegertracing/jaeger/internal/jptrace"
19+
"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
1920
)
2021

2122
func TestProtoFromTraces_AddsWarnings(t *testing.T) {
@@ -287,30 +288,35 @@ func TestV1TraceToOtelTrace_ReturnEmptyOtelTrace(t *testing.T) {
287288
func TestV1TraceIDsFromSeq2(t *testing.T) {
288289
testCases := []struct {
289290
name string
290-
seqTraceIDs iter.Seq2[[]pcommon.TraceID, error]
291+
seqTraceIDs iter.Seq2[[]tracestore.FoundTraceID, error]
291292
expectedIDs []model.TraceID
292293
expectedError error
293294
}{
294295
{
295296
name: "empty sequence",
296-
seqTraceIDs: func(func([]pcommon.TraceID, error) bool) {},
297+
seqTraceIDs: func(func([]tracestore.FoundTraceID, error) bool) {},
297298
expectedIDs: nil,
298299
expectedError: nil,
299300
},
300301
{
301302
name: "sequence with error",
302-
seqTraceIDs: func(yield func([]pcommon.TraceID, error) bool) {
303+
seqTraceIDs: func(yield func([]tracestore.FoundTraceID, error) bool) {
303304
yield(nil, assert.AnError)
304305
},
305306
expectedIDs: nil,
306307
expectedError: assert.AnError,
307308
},
308309
{
309310
name: "sequence with one chunk of trace IDs",
310-
seqTraceIDs: func(yield func([]pcommon.TraceID, error) bool) {
311-
traceID1 := pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3})
312-
traceID2 := pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5})
313-
yield([]pcommon.TraceID{traceID1, traceID2}, nil)
311+
seqTraceIDs: func(yield func([]tracestore.FoundTraceID, error) bool) {
312+
yield([]tracestore.FoundTraceID{
313+
{
314+
TraceID: pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3}),
315+
},
316+
{
317+
TraceID: pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5}),
318+
},
319+
}, nil)
314320
},
315321
expectedIDs: []model.TraceID{
316322
model.NewTraceID(2, 3),
@@ -320,12 +326,12 @@ func TestV1TraceIDsFromSeq2(t *testing.T) {
320326
},
321327
{
322328
name: "sequence with multiple chunks of trace IDs",
323-
seqTraceIDs: func(yield func([]pcommon.TraceID, error) bool) {
329+
seqTraceIDs: func(yield func([]tracestore.FoundTraceID, error) bool) {
324330
traceID1 := pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3})
325331
traceID2 := pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5})
326332
traceID3 := pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7})
327-
yield([]pcommon.TraceID{traceID1}, nil)
328-
yield([]pcommon.TraceID{traceID2, traceID3}, nil)
333+
yield([]tracestore.FoundTraceID{{TraceID: traceID1}}, nil)
334+
yield([]tracestore.FoundTraceID{{TraceID: traceID2}, {TraceID: traceID3}}, nil)
329335
},
330336
expectedIDs: []model.TraceID{
331337
model.NewTraceID(2, 3),

0 commit comments

Comments
 (0)