Skip to content

Commit d6ac23c

Browse files
authored
[grpc][v2] Implement GetOperations Call in gRPC reader for remote storage api v2 (#6843)
<!-- !! Please DELETE this comment before posting. We appreciate your contribution to the Jaeger project! 👋🎉 --> ## Which problem is this PR solving? - Towards #6789 ## Description of the changes - This PR implements the `GetOperations` call in the gRPC tracereader ## How was this change tested? - Added a unit test ## 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 039c15b commit d6ac23c

File tree

2 files changed

+89
-25
lines changed

2 files changed

+89
-25
lines changed

internal/storage/v2/grpc/tracereader.go

+19-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package grpc
55

66
import (
77
"context"
8-
"errors"
98
"fmt"
109
"iter"
1110

@@ -18,8 +17,6 @@ import (
1817

1918
var _ tracestore.Reader = (*TraceReader)(nil)
2019

21-
var errFailedToGetServices = errors.New("failed to get services")
22-
2320
type TraceReader struct {
2421
client storage.TraceReaderClient
2522
}
@@ -43,16 +40,30 @@ func (*TraceReader) GetTraces(
4340
func (tr *TraceReader) GetServices(ctx context.Context) ([]string, error) {
4441
resp, err := tr.client.GetServices(ctx, &storage.GetServicesRequest{})
4542
if err != nil {
46-
return nil, fmt.Errorf("%w: %w", errFailedToGetServices, err)
43+
return nil, fmt.Errorf("failed to get services: %w", err)
4744
}
4845
return resp.Services, nil
4946
}
5047

51-
func (*TraceReader) GetOperations(
52-
context.Context,
53-
tracestore.OperationQueryParams,
48+
func (tr *TraceReader) GetOperations(
49+
ctx context.Context,
50+
params tracestore.OperationQueryParams,
5451
) ([]tracestore.Operation, error) {
55-
panic("not implemented")
52+
resp, err := tr.client.GetOperations(ctx, &storage.GetOperationsRequest{
53+
Service: params.ServiceName,
54+
SpanKind: params.SpanKind,
55+
})
56+
if err != nil {
57+
return nil, fmt.Errorf("failed to get operations: %w", err)
58+
}
59+
operations := make([]tracestore.Operation, len(resp.Operations))
60+
for i, op := range resp.Operations {
61+
operations[i] = tracestore.Operation{
62+
Name: op.Name,
63+
SpanKind: op.SpanKind,
64+
}
65+
}
66+
return operations, nil
5667
}
5768

5869
func (*TraceReader) FindTraces(

internal/storage/v2/grpc/tracereader_test.go

+70-17
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,27 @@ import (
2222
type testServer struct {
2323
storage.UnimplementedTraceReaderServer
2424

25-
getServicesError error
25+
services []string
26+
operations []*storage.Operation
27+
err error
2628
}
2729

2830
func (s *testServer) GetServices(
2931
context.Context,
3032
*storage.GetServicesRequest,
3133
) (*storage.GetServicesResponse, error) {
32-
if s.getServicesError != nil {
33-
return nil, s.getServicesError
34-
}
3534
return &storage.GetServicesResponse{
36-
Services: []string{"service-a", "service-b"},
37-
}, nil
35+
Services: s.services,
36+
}, s.err
37+
}
38+
39+
func (s *testServer) GetOperations(
40+
context.Context,
41+
*storage.GetOperationsRequest,
42+
) (*storage.GetOperationsResponse, error) {
43+
return &storage.GetOperationsResponse{
44+
Operations: s.operations,
45+
}, s.err
3846
}
3947

4048
func startTestServer(t *testing.T, testServer *testServer) *grpc.ClientConn {
@@ -78,19 +86,21 @@ func TestTraceReader_GetServices(t *testing.T) {
7886
name string
7987
testServer *testServer
8088
expectedServices []string
81-
expectedError error
89+
expectedError string
8290
}{
8391
{
84-
name: "success",
85-
testServer: &testServer{},
92+
name: "success",
93+
testServer: &testServer{
94+
services: []string{"service-a", "service-b"},
95+
},
8696
expectedServices: []string{"service-a", "service-b"},
8797
},
8898
{
8999
name: "error",
90100
testServer: &testServer{
91-
getServicesError: assert.AnError,
101+
err: assert.AnError,
92102
},
93-
expectedError: errFailedToGetServices,
103+
expectedError: "failed to get services",
94104
},
95105
}
96106

@@ -101,18 +111,61 @@ func TestTraceReader_GetServices(t *testing.T) {
101111
reader := NewTraceReader(conn)
102112
services, err := reader.GetServices(context.Background())
103113

104-
require.ErrorIs(t, err, test.expectedError)
105-
require.Equal(t, test.expectedServices, services)
114+
if test.expectedError != "" {
115+
require.ErrorContains(t, err, test.expectedError)
116+
} else {
117+
require.Equal(t, test.expectedServices, services)
118+
}
106119
})
107120
}
108121
}
109122

110123
func TestTraceReader_GetOperations(t *testing.T) {
111-
tr := &TraceReader{}
124+
tests := []struct {
125+
name string
126+
testServer *testServer
127+
expectedOps []tracestore.Operation
128+
expectedError string
129+
}{
130+
{
131+
name: "success",
132+
testServer: &testServer{
133+
operations: []*storage.Operation{
134+
{Name: "operation-a", SpanKind: "kind"},
135+
{Name: "operation-b", SpanKind: "kind"},
136+
},
137+
},
138+
expectedOps: []tracestore.Operation{
139+
{Name: "operation-a", SpanKind: "kind"},
140+
{Name: "operation-b", SpanKind: "kind"},
141+
},
142+
},
143+
{
144+
name: "error",
145+
testServer: &testServer{
146+
err: assert.AnError,
147+
},
148+
expectedError: "failed to get operations",
149+
},
150+
}
112151

113-
require.Panics(t, func() {
114-
tr.GetOperations(context.Background(), tracestore.OperationQueryParams{})
115-
})
152+
for _, test := range tests {
153+
t.Run(test.name, func(t *testing.T) {
154+
conn := startTestServer(t, test.testServer)
155+
156+
reader := NewTraceReader(conn)
157+
ops, err := reader.GetOperations(context.Background(), tracestore.OperationQueryParams{
158+
ServiceName: "service-a",
159+
SpanKind: "kind",
160+
})
161+
162+
if test.expectedError != "" {
163+
require.ErrorContains(t, err, test.expectedError)
164+
} else {
165+
require.Equal(t, test.expectedOps, ops)
166+
}
167+
})
168+
}
116169
}
117170

118171
func TestTraceReader_FindTraces(t *testing.T) {

0 commit comments

Comments
 (0)