Skip to content

Commit 61ab9dd

Browse files
Manik2708amol-verma-allen
authored andcommitted
[v2] Implement FindTraceIDs for ES/OS (jaegertracing#7035)
## Which problem is this PR solving? - Fixes a part of: jaegertracing#7034 ## Description of the changes - Implement `FindTraceIDs` for ES/OS ## How was this change tested? - Unit Tests ## 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: Manik2708 <[email protected]>
1 parent d693a9d commit 61ab9dd

File tree

2 files changed

+119
-8
lines changed

2 files changed

+119
-8
lines changed

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

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,41 @@ func (*TraceReader) FindTraces(_ context.Context, _ v2api.TraceQueryParams) iter
5656
panic("not implemented")
5757
}
5858

59-
func (*TraceReader) FindTraceIDs(_ context.Context, _ v2api.TraceQueryParams) iter.Seq2[[]v2api.FoundTraceID, error] {
60-
panic("not implemented")
59+
func (t *TraceReader) FindTraceIDs(ctx context.Context, query v2api.TraceQueryParams) iter.Seq2[[]v2api.FoundTraceID, error] {
60+
return func(yield func([]v2api.FoundTraceID, error) bool) {
61+
traceIds, err := t.spanReader.FindTraceIDs(ctx, toDBTraceQueryParams(query))
62+
if err != nil {
63+
yield(nil, err)
64+
return
65+
}
66+
otelTraceIds := make([]v2api.FoundTraceID, 0, len(traceIds))
67+
for _, traceId := range traceIds {
68+
dbTraceId, err := fromDbTraceId(traceId)
69+
if err != nil {
70+
yield(nil, err)
71+
return
72+
}
73+
otelTraceIds = append(otelTraceIds, v2api.FoundTraceID{
74+
TraceID: dbTraceId,
75+
})
76+
}
77+
yield(otelTraceIds, nil)
78+
}
79+
}
80+
81+
func toDBTraceQueryParams(query v2api.TraceQueryParams) dbmodel.TraceQueryParameters {
82+
tags := make(map[string]string)
83+
for key, val := range query.Attributes.All() {
84+
tags[key] = val.AsString()
85+
}
86+
return dbmodel.TraceQueryParameters{
87+
ServiceName: query.ServiceName,
88+
OperationName: query.OperationName,
89+
StartTimeMin: query.StartTimeMin,
90+
StartTimeMax: query.StartTimeMax,
91+
Tags: tags,
92+
NumTraces: query.SearchDepth,
93+
DurationMin: query.DurationMin,
94+
DurationMax: query.DurationMax,
95+
}
6196
}

internal/storage/v2/elasticsearch/tracestore/reader_test.go

Lines changed: 82 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import (
77
"context"
88
"errors"
99
"testing"
10+
"time"
1011

1112
"github.com/stretchr/testify/assert"
1213
"github.com/stretchr/testify/mock"
1314
"github.com/stretchr/testify/require"
15+
"go.opentelemetry.io/collector/pdata/pcommon"
1416
"go.uber.org/zap"
1517

1618
"github.com/jaegertracing/jaeger/internal/storage/elasticsearch/dbmodel"
@@ -86,10 +88,84 @@ func TestTraceReader_FindTraces(t *testing.T) {
8688
}
8789

8890
func TestTraceReader_FindTraceIDs(t *testing.T) {
89-
reader := NewTraceReader(spanstore.SpanReaderParams{
90-
Logger: zap.NewNop(),
91-
})
92-
assert.Panics(t, func() {
93-
reader.FindTraceIDs(context.Background(), v2api.TraceQueryParams{})
94-
})
91+
coreReader := &mocks.CoreSpanReader{}
92+
reader := TraceReader{spanReader: coreReader}
93+
dbTraceIDs := []dbmodel.TraceID{
94+
"00000000000000010000000000000000",
95+
"00000000000000020000000000000000",
96+
"00000000000000030000000000000000",
97+
}
98+
expected := make([]v2api.FoundTraceID, 0, len(dbTraceIDs))
99+
for _, dbTraceID := range dbTraceIDs {
100+
expected = append(expected, fromDBTraceId(t, dbTraceID))
101+
}
102+
coreReader.On("FindTraceIDs", mock.Anything, mock.Anything).Return(dbTraceIDs, nil)
103+
for traceIds, err := range reader.FindTraceIDs(context.Background(), v2api.TraceQueryParams{
104+
Attributes: pcommon.NewMap(),
105+
}) {
106+
require.NoError(t, err)
107+
require.Equal(t, expected, traceIds)
108+
}
109+
}
110+
111+
func TestTraceReader_FindTraceIDs_Error(t *testing.T) {
112+
tests := []struct {
113+
name string
114+
errFromCoreReader error
115+
traceIdsFromCoreReader []dbmodel.TraceID
116+
expectedErr string
117+
}{
118+
{
119+
name: "some error from core reader",
120+
errFromCoreReader: errors.New("some error from core reader"),
121+
expectedErr: "some error from core reader",
122+
},
123+
{
124+
name: "wrong trace id sent from core reader",
125+
traceIdsFromCoreReader: []dbmodel.TraceID{"wrong-id"},
126+
expectedErr: "encoding/hex: invalid byte: U+0077 'w'",
127+
},
128+
}
129+
for _, test := range tests {
130+
t.Run(test.name, func(t *testing.T) {
131+
coreReader := &mocks.CoreSpanReader{}
132+
attrs := pcommon.NewMap()
133+
attrs.PutStr("key1", "val1")
134+
ts := time.Now()
135+
traceQueryParams := v2api.TraceQueryParams{
136+
Attributes: attrs,
137+
StartTimeMin: ts,
138+
ServiceName: "testing-service-name",
139+
OperationName: "testing-operation-name",
140+
StartTimeMax: ts.Add(1 * time.Hour),
141+
DurationMin: 1 * time.Hour,
142+
DurationMax: 1 * time.Hour,
143+
SearchDepth: 10,
144+
}
145+
dbTraceQueryParams := dbmodel.TraceQueryParameters{
146+
Tags: map[string]string{"key1": "val1"},
147+
StartTimeMin: ts,
148+
ServiceName: "testing-service-name",
149+
OperationName: "testing-operation-name",
150+
StartTimeMax: ts.Add(1 * time.Hour),
151+
DurationMin: 1 * time.Hour,
152+
DurationMax: 1 * time.Hour,
153+
NumTraces: 10,
154+
}
155+
coreReader.On("FindTraceIDs", mock.Anything, dbTraceQueryParams).Return(test.traceIdsFromCoreReader, test.errFromCoreReader)
156+
reader := TraceReader{spanReader: coreReader}
157+
for traceIds, err := range reader.FindTraceIDs(context.Background(), traceQueryParams) {
158+
require.ErrorContains(t, err, test.expectedErr)
159+
require.Nil(t, traceIds)
160+
}
161+
})
162+
}
163+
}
164+
165+
func fromDBTraceId(t *testing.T, traceID dbmodel.TraceID) v2api.FoundTraceID {
166+
traceId, err := fromDbTraceId(traceID)
167+
require.NoError(t, err)
168+
return v2api.FoundTraceID{
169+
TraceID: traceId,
170+
}
95171
}

0 commit comments

Comments
 (0)