Skip to content

Commit a54e2a5

Browse files
authored
Make OTLP receiver listen on all IPs again (#5739)
## Which problem is this PR solving? - Resolves #5737 ## Description of the changes - Revert #5734 - Default OTLP receiver endpoints to `:port` instead of relying on OTEL Collector defaults - Clean up tests to use ephemeral ports when possible ## How was this change tested? - Tested similar to #5734 by using `COLLECTOR_OTLP_HTTP_HOST_PORT=:4318` --------- Signed-off-by: Yuri Shkuro <[email protected]>
1 parent eae8e66 commit a54e2a5

File tree

16 files changed

+156
-174
lines changed

16 files changed

+156
-174
lines changed

cmd/collector/app/flags/flags.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,9 @@ func AddFlags(flags *flag.FlagSet) {
194194
addGRPCFlags(flags, grpcServerFlagsCfg, ports.PortToHostPort(ports.CollectorGRPC))
195195

196196
flags.Bool(flagCollectorOTLPEnabled, true, "Enables OpenTelemetry OTLP receiver on dedicated HTTP and gRPC ports")
197-
addHTTPFlags(flags, otlpServerFlagsCfg.HTTP, "")
197+
addHTTPFlags(flags, otlpServerFlagsCfg.HTTP, ":4318")
198198
corsOTLPFlags.AddFlags(flags)
199-
addGRPCFlags(flags, otlpServerFlagsCfg.GRPC, "")
199+
addGRPCFlags(flags, otlpServerFlagsCfg.GRPC, ":4317")
200200

201201
flags.String(flagZipkinHTTPHostPort, "", "The host:port (e.g. 127.0.0.1:9411 or :9411) of the collector's Zipkin server (disabled by default)")
202202
flags.Bool(flagZipkinKeepAliveEnabled, true, "KeepAlive configures allow Keep-Alive for Zipkin HTTP server (enabled by default)")

cmd/collector/app/server/grpc_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ func TestCollectorReflection(t *testing.T) {
129129

130130
grpctest.ReflectionServiceValidator{
131131
HostPort: params.HostPortActual,
132-
Server: server,
133132
ExpectedServices: []string{
134133
"jaeger.api_v2.CollectorService",
135134
"jaeger.api_v2.SamplingManager",

cmd/jaeger/internal/extension/jaegerquery/config.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package jaegerquery
66
import (
77
"github.com/asaskevich/govalidator"
88
"go.opentelemetry.io/collector/component"
9+
"go.opentelemetry.io/collector/config/configgrpc"
910
"go.opentelemetry.io/collector/config/confighttp"
1011

1112
queryApp "github.com/jaegertracing/jaeger/cmd/query/app"
@@ -18,10 +19,13 @@ var _ component.ConfigValidator = (*Config)(nil)
1819
type Config struct {
1920
queryApp.QueryOptionsBase `mapstructure:",squash"`
2021

21-
TraceStoragePrimary string `valid:"required" mapstructure:"trace_storage"`
22-
TraceStorageArchive string `valid:"optional" mapstructure:"trace_storage_archive"`
23-
confighttp.ServerConfig `mapstructure:",squash"`
24-
Tenancy tenancy.Options `mapstructure:"multi_tenancy"`
22+
TraceStoragePrimary string `valid:"required" mapstructure:"trace_storage"`
23+
TraceStorageArchive string `valid:"optional" mapstructure:"trace_storage_archive"`
24+
25+
HTTP confighttp.ServerConfig `mapstructure:",squash"`
26+
GRPC configgrpc.ServerConfig `mapstructure:",squash"`
27+
28+
Tenancy tenancy.Options `mapstructure:"multi_tenancy"`
2529
}
2630

2731
func (cfg *Config) Validate() error {

cmd/jaeger/internal/extension/jaegerquery/factory.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import (
77
"context"
88

99
"go.opentelemetry.io/collector/component"
10+
"go.opentelemetry.io/collector/config/configgrpc"
1011
"go.opentelemetry.io/collector/config/confighttp"
12+
"go.opentelemetry.io/collector/config/confignet"
1113
"go.opentelemetry.io/collector/extension"
1214

1315
"github.com/jaegertracing/jaeger/ports"
@@ -25,9 +27,15 @@ func NewFactory() extension.Factory {
2527

2628
func createDefaultConfig() component.Config {
2729
return &Config{
28-
ServerConfig: confighttp.ServerConfig{
30+
HTTP: confighttp.ServerConfig{
2931
Endpoint: ports.PortToHostPort(ports.QueryHTTP),
3032
},
33+
GRPC: configgrpc.ServerConfig{
34+
NetAddr: confignet.AddrConfig{
35+
Endpoint: ports.PortToHostPort(ports.QueryGRPC),
36+
Transport: confignet.TransportTypeTCP,
37+
},
38+
},
3139
}
3240
}
3341

cmd/jaeger/internal/extension/jaegerquery/server.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/jaegertracing/jaeger/pkg/telemetery"
1919
"github.com/jaegertracing/jaeger/pkg/tenancy"
2020
"github.com/jaegertracing/jaeger/plugin/metrics/disabled"
21-
"github.com/jaegertracing/jaeger/ports"
2221
)
2322

2423
var (
@@ -127,9 +126,10 @@ func (s *server) makeQueryOptions() *queryApp.QueryOptions {
127126
return &queryApp.QueryOptions{
128127
QueryOptionsBase: s.config.QueryOptionsBase,
129128

130-
// TODO expose via config
131-
HTTPHostPort: ports.PortToHostPort(ports.QueryHTTP),
132-
GRPCHostPort: ports.PortToHostPort(ports.QueryGRPC),
129+
// TODO utilize OTEL helpers for creating HTTP/GRPC servers
130+
HTTPHostPort: s.config.HTTP.Endpoint,
131+
GRPCHostPort: s.config.GRPC.NetAddr.Endpoint,
132+
// TODO handle TLS
133133
}
134134
}
135135

cmd/jaeger/internal/extension/jaegerquery/server_test.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ package jaegerquery
66
import (
77
"context"
88
"fmt"
9+
"net/http"
910
"testing"
11+
"time"
1012

1113
"github.com/stretchr/testify/assert"
1214
"github.com/stretchr/testify/require"
@@ -17,6 +19,7 @@ import (
1719

1820
"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage"
1921
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
22+
"github.com/jaegertracing/jaeger/internal/grpctest"
2023
"github.com/jaegertracing/jaeger/pkg/metrics"
2124
"github.com/jaegertracing/jaeger/pkg/testutils"
2225
"github.com/jaegertracing/jaeger/storage"
@@ -160,14 +163,40 @@ func TestServerStart(t *testing.T) {
160163
for _, tt := range tests {
161164
t.Run(tt.name, func(t *testing.T) {
162165
telemetrySettings := component.TelemetrySettings{
163-
Logger: zaptest.NewLogger(t, zaptest.WrapOptions(zap.AddCaller())),
166+
Logger: zaptest.NewLogger(t, zaptest.WrapOptions(zap.AddCaller())),
167+
ReportStatus: func(*component.StatusEvent) {},
164168
}
169+
tt.config.HTTP.Endpoint = ":0"
170+
tt.config.GRPC.NetAddr.Endpoint = ":0"
165171
server := newServer(tt.config, telemetrySettings)
166172
err := server.Start(context.Background(), host)
167-
168173
if tt.expectedErr == "" {
169174
require.NoError(t, err)
170175
defer server.Shutdown(context.Background())
176+
// We need to wait for servers to become available.
177+
// Otherwise, we could call shutdown before the servers are even started,
178+
// which could cause flaky code coverage by going through error cases.
179+
require.Eventually(t,
180+
func() bool {
181+
resp, err := http.Get(fmt.Sprintf("http://%s/", server.server.HTTPAddr()))
182+
if err != nil {
183+
return false
184+
}
185+
defer resp.Body.Close()
186+
return resp.StatusCode == http.StatusOK
187+
},
188+
10*time.Second,
189+
100*time.Millisecond,
190+
"server not started")
191+
grpctest.ReflectionServiceValidator{
192+
HostPort: server.server.GRPCAddr(),
193+
ExpectedServices: []string{
194+
"jaeger.api_v2.QueryService",
195+
"jaeger.api_v3.QueryService",
196+
"jaeger.api_v2.metrics.MetricsQueryService",
197+
"grpc.health.v1.Health",
198+
},
199+
}.Execute(t)
171200
} else {
172201
require.ErrorContains(t, err, tt.expectedErr)
173202
}

cmd/query/app/handler_archive_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func TestGetArchivedTrace_NotFound(t *testing.T) {
4848
} {
4949
tc := tc // capture loop var
5050
t.Run(tc.name, func(t *testing.T) {
51-
withTestServer(func(ts *testServer) {
51+
withTestServer(t, func(ts *testServer) {
5252
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
5353
Return(nil, spanstore.ErrTraceNotFound).Once()
5454
var response structuredResponse
@@ -66,7 +66,7 @@ func TestGetArchivedTraceSuccess(t *testing.T) {
6666
mockReader := &spanstoremocks.Reader{}
6767
mockReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
6868
Return(mockTrace, nil).Once()
69-
withTestServer(func(ts *testServer) {
69+
withTestServer(t, func(ts *testServer) {
7070
// make main reader return NotFound
7171
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
7272
Return(nil, spanstore.ErrTraceNotFound).Once()
@@ -81,7 +81,7 @@ func TestGetArchivedTraceSuccess(t *testing.T) {
8181

8282
// Test failure in parsing trace ID.
8383
func TestArchiveTrace_BadTraceID(t *testing.T) {
84-
withTestServer(func(ts *testServer) {
84+
withTestServer(t, func(ts *testServer) {
8585
var response structuredResponse
8686
err := postJSON(ts.server.URL+"/api/archive/badtraceid", []string{}, &response)
8787
require.Error(t, err)
@@ -95,7 +95,7 @@ func TestArchiveTrace_TraceNotFound(t *testing.T) {
9595
Return(nil, spanstore.ErrTraceNotFound).Once()
9696
mockWriter := &spanstoremocks.Writer{}
9797
// Not actually going to write the trace, so no need to define mockWriter action
98-
withTestServer(func(ts *testServer) {
98+
withTestServer(t, func(ts *testServer) {
9999
// make main reader return NotFound
100100
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
101101
Return(nil, spanstore.ErrTraceNotFound).Once()
@@ -106,7 +106,7 @@ func TestArchiveTrace_TraceNotFound(t *testing.T) {
106106
}
107107

108108
func TestArchiveTrace_NoStorage(t *testing.T) {
109-
withTestServer(func(ts *testServer) {
109+
withTestServer(t, func(ts *testServer) {
110110
var response structuredResponse
111111
err := postJSON(ts.server.URL+"/api/archive/"+mockTraceID.String(), []string{}, &response)
112112
require.EqualError(t, err, `500 error from server: {"data":null,"total":0,"limit":0,"offset":0,"errors":[{"code":500,"msg":"archive span storage was not configured"}]}`+"\n")
@@ -117,7 +117,7 @@ func TestArchiveTrace_Success(t *testing.T) {
117117
mockWriter := &spanstoremocks.Writer{}
118118
mockWriter.On("WriteSpan", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("*model.Span")).
119119
Return(nil).Times(2)
120-
withTestServer(func(ts *testServer) {
120+
withTestServer(t, func(ts *testServer) {
121121
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
122122
Return(mockTrace, nil).Once()
123123
var response structuredResponse
@@ -130,7 +130,7 @@ func TestArchiveTrace_WriteErrors(t *testing.T) {
130130
mockWriter := &spanstoremocks.Writer{}
131131
mockWriter.On("WriteSpan", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("*model.Span")).
132132
Return(errors.New("cannot save")).Times(2)
133-
withTestServer(func(ts *testServer) {
133+
withTestServer(t, func(ts *testServer) {
134134
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")).
135135
Return(mockTrace, nil).Once()
136136
var response structuredResponse

cmd/query/app/handler_deps_test.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,7 @@ func TestFilterDependencies(t *testing.T) {
310310
}
311311

312312
func TestGetDependenciesSuccess(t *testing.T) {
313-
ts := initializeTestServer()
314-
defer ts.server.Close()
313+
ts := initializeTestServer(t)
315314
expectedDependencies := []model.DependencyLink{{Parent: "killer", Child: "queen", CallCount: 12}}
316315
endTs := time.Unix(0, 1476374248550*millisToNanosMultiplier)
317316
ts.dependencyReader.On("GetDependencies",
@@ -332,29 +331,27 @@ func TestGetDependenciesSuccess(t *testing.T) {
332331
}
333332

334333
func TestGetDependenciesCassandraFailure(t *testing.T) {
335-
ts := initializeTestServer()
336-
defer ts.server.Close()
334+
ts := initializeTestServer(t)
337335
endTs := time.Unix(0, 1476374248550*millisToNanosMultiplier)
338-
ts.dependencyReader.On("GetDependencies", endTs, defaultDependencyLookbackDuration).Return(nil, errStorage).Times(1)
336+
ts.dependencyReader.On("GetDependencies",
337+
mock.Anything, // context
338+
endTs,
339+
defaultDependencyLookbackDuration).Return(nil, errStorage).Times(1)
339340

340341
var response structuredResponse
341342
err := getJSON(ts.server.URL+"/api/dependencies?endTs=1476374248550&service=testing", &response)
342343
require.Error(t, err)
343344
}
344345

345346
func TestGetDependenciesEndTimeParsingFailure(t *testing.T) {
346-
ts := initializeTestServer()
347-
defer ts.server.Close()
348-
347+
ts := initializeTestServer(t)
349348
var response structuredResponse
350349
err := getJSON(ts.server.URL+"/api/dependencies?endTs=shazbot&service=testing", &response)
351350
require.Error(t, err)
352351
}
353352

354353
func TestGetDependenciesLookbackParsingFailure(t *testing.T) {
355-
ts := initializeTestServer()
356-
defer ts.server.Close()
357-
354+
ts := initializeTestServer(t)
358355
var response structuredResponse
359356
err := getJSON(ts.server.URL+"/api/dependencies?endTs=1476374248550&service=testing&lookback=shazbot", &response)
360357
require.Error(t, err)

0 commit comments

Comments
 (0)