Skip to content

Commit 7189b52

Browse files
authored
[v2][storage] Implement reverse adapter to translate v2 writer to v1 (jaegertracing#6555)
## Which problem is this PR solving? - Towards jaegertracing#6065 ## Description of the changes - This PR implements a reverse adapter (SpanWriter) that wraps a native v2 storage writer (tracestore.Writer) and downgrades it to implement the v1 writer (spanstore.Writer). - This will be used by jaegertracing#6519 to downgrade a native v2 writer so that it can be used by the v1 query service ## How was this change tested? - Added 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: Mahad Zaryab <[email protected]>
1 parent c36d588 commit 7189b52

6 files changed

+100
-0
lines changed

storage_v2/v1adapter/spanwriter.go

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) 2025 The Jaeger Authors.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package v1adapter
5+
6+
import (
7+
"context"
8+
9+
jaegerTranslator "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger"
10+
11+
"github.com/jaegertracing/jaeger/model"
12+
"github.com/jaegertracing/jaeger/storage/spanstore"
13+
"github.com/jaegertracing/jaeger/storage_v2/tracestore"
14+
)
15+
16+
var _ spanstore.Writer = (*SpanWriter)(nil)
17+
18+
// SpanReader wraps a tracestore.Writer so that it can be downgraded to implement
19+
// the v1 spanstore.Writer interface.
20+
type SpanWriter struct {
21+
traceWriter tracestore.Writer
22+
}
23+
24+
func NewSpanWriter(traceWriter tracestore.Writer) *SpanWriter {
25+
return &SpanWriter{
26+
traceWriter: traceWriter,
27+
}
28+
}
29+
30+
func (sw *SpanWriter) WriteSpan(ctx context.Context, span *model.Span) error {
31+
traces, _ := jaegerTranslator.ProtoToTraces([]*model.Batch{{Spans: []*model.Span{span}}})
32+
return sw.traceWriter.WriteTraces(ctx, traces)
33+
}
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright (c) 2025 The Jaeger Authors.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package v1adapter
5+
6+
import (
7+
"context"
8+
"testing"
9+
"time"
10+
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/mock"
13+
"github.com/stretchr/testify/require"
14+
"go.opentelemetry.io/collector/pdata/pcommon"
15+
"go.opentelemetry.io/collector/pdata/ptrace"
16+
17+
"github.com/jaegertracing/jaeger/model"
18+
tracestoremocks "github.com/jaegertracing/jaeger/storage_v2/tracestore/mocks"
19+
)
20+
21+
func TestSpanWriter_WriteSpan(t *testing.T) {
22+
tests := []struct {
23+
name string
24+
mockReturnErr error
25+
expectedErr error
26+
}{
27+
{
28+
name: "success",
29+
mockReturnErr: nil,
30+
expectedErr: nil,
31+
},
32+
{
33+
name: "error in translator",
34+
mockReturnErr: assert.AnError,
35+
expectedErr: assert.AnError,
36+
},
37+
}
38+
39+
for _, test := range tests {
40+
t.Run(test.name, func(t *testing.T) {
41+
mockTraceWriter := &tracestoremocks.Writer{}
42+
spanWriter := NewSpanWriter(mockTraceWriter)
43+
44+
now := time.Now().UTC()
45+
testSpan := &model.Span{
46+
TraceID: model.NewTraceID(0, 1),
47+
SpanID: model.NewSpanID(1),
48+
StartTime: now,
49+
Duration: time.Second,
50+
}
51+
52+
traces := ptrace.NewTraces()
53+
resources := traces.ResourceSpans().AppendEmpty()
54+
scopes := resources.ScopeSpans().AppendEmpty()
55+
span := scopes.Spans().AppendEmpty()
56+
span.SetTraceID(pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}))
57+
span.SetSpanID(pcommon.SpanID([8]byte{0, 0, 0, 0, 0, 0, 0, 1}))
58+
span.SetStartTimestamp(pcommon.NewTimestampFromTime(now))
59+
span.SetEndTimestamp(pcommon.NewTimestampFromTime(now.Add(time.Second)))
60+
61+
mockTraceWriter.On("WriteTraces", mock.Anything, traces).Return(test.mockReturnErr)
62+
63+
err := spanWriter.WriteSpan(context.Background(), testSpan)
64+
require.ErrorIs(t, err, test.expectedErr)
65+
})
66+
}
67+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)