Skip to content

Commit 898dfce

Browse files
authored
Remove v1 storage factories (#7708)
Now that v1 binaries are removed and remote-storage upgraded to share config with v2 storage extension we can remove v1 style factories and their CLI-based configuration methods --------- Signed-off-by: Yuri Shkuro <[email protected]>
1 parent c1f72cb commit 898dfce

File tree

25 files changed

+53
-2877
lines changed

25 files changed

+53
-2877
lines changed

cmd/query/app/token_propagation_test.go

Lines changed: 2 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -3,161 +3,5 @@
33

44
package app
55

6-
import (
7-
"context"
8-
"encoding/json"
9-
"fmt"
10-
"net/http"
11-
"net/http/httptest"
12-
"testing"
13-
14-
"github.com/olivere/elastic/v7"
15-
"github.com/stretchr/testify/assert"
16-
"github.com/stretchr/testify/require"
17-
"go.opentelemetry.io/collector/config/configgrpc"
18-
"go.opentelemetry.io/collector/config/confighttp"
19-
"go.opentelemetry.io/collector/config/confignet"
20-
"go.opentelemetry.io/collector/config/configoptional"
21-
"go.uber.org/zap/zaptest"
22-
23-
"github.com/jaegertracing/jaeger/cmd/internal/flags"
24-
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
25-
v2querysvc "github.com/jaegertracing/jaeger/cmd/query/app/querysvc/v2/querysvc"
26-
"github.com/jaegertracing/jaeger/internal/auth/bearertoken"
27-
"github.com/jaegertracing/jaeger/internal/config"
28-
escfg "github.com/jaegertracing/jaeger/internal/storage/elasticsearch/config"
29-
es "github.com/jaegertracing/jaeger/internal/storage/v1/elasticsearch"
30-
"github.com/jaegertracing/jaeger/internal/storage/v2/v1adapter"
31-
"github.com/jaegertracing/jaeger/internal/telemetry"
32-
"github.com/jaegertracing/jaeger/internal/tenancy"
33-
"github.com/jaegertracing/jaeger/ports"
34-
)
35-
36-
const (
37-
bearerToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI"
38-
bearerHeader = "Bearer " + bearerToken
39-
)
40-
41-
type elasticsearchHandlerMock struct {
42-
test *testing.T
43-
}
44-
45-
func (*elasticsearchHandlerMock) ServeHTTP(w http.ResponseWriter, r *http.Request) {
46-
if token, ok := bearertoken.GetBearerToken(r.Context()); ok && token == bearerToken {
47-
// Return empty results, we don't care about the result here.
48-
// we just need to make sure the token was propagated to the storage and the query-service returns 200
49-
ret := new(elastic.SearchResult)
50-
json_ret, _ := json.Marshal(ret)
51-
w.Header().Add("Content-Type", "application/json; charset=UTF-8")
52-
w.Write(json_ret)
53-
return
54-
}
55-
56-
// No token, return error!
57-
http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
58-
}
59-
60-
func runMockElasticsearchServer(t *testing.T) *httptest.Server {
61-
handler := &elasticsearchHandlerMock{
62-
test: t,
63-
}
64-
return httptest.NewServer(
65-
bearertoken.PropagationHandler(zaptest.NewLogger(t), handler),
66-
)
67-
}
68-
69-
func runQueryService(t *testing.T, esURL string) *Server {
70-
flagsSvc := flags.NewService(ports.RemoteStorageAdminHTTP)
71-
flagsSvc.Logger = zaptest.NewLogger(t)
72-
73-
telset := telemetry.NoopSettings()
74-
telset.Logger = flagsSvc.Logger
75-
telset.ReportStatus = telemetry.HCAdapter(flagsSvc.HC())
76-
77-
f := es.NewFactory()
78-
v, command := config.Viperize(f.AddFlags)
79-
require.NoError(t, command.ParseFlags([]string{
80-
"--es.tls.enabled=false",
81-
"--es.version=7",
82-
"--es.server-urls=" + esURL,
83-
"--es.create-index-templates=false",
84-
}))
85-
86-
f.InitFromViper(v, flagsSvc.Logger)
87-
// set AllowTokenFromContext manually because we don't register the respective CLI flag from query svc
88-
bearerAuth := escfg.TokenAuthentication{
89-
AllowFromContext: true,
90-
}
91-
// set the authentication in the factory options
92-
f.Options.Config.Authentication = escfg.Authentication{
93-
BearerTokenAuth: configoptional.Some(bearerAuth),
94-
}
95-
96-
// Initialize the factory with metrics and logger
97-
require.NoError(t, f.Initialize(telset.Metrics, telset.Logger))
98-
defer f.Close()
99-
100-
spanReader, err := f.CreateSpanReader()
101-
require.NoError(t, err)
102-
traceReader := v1adapter.NewTraceReader(spanReader)
103-
104-
querySvc := querysvc.NewQueryService(traceReader, nil, querysvc.QueryServiceOptions{})
105-
v2QuerySvc := v2querysvc.NewQueryService(traceReader, nil, v2querysvc.QueryServiceOptions{})
106-
server, err := NewServer(context.Background(), querySvc, v2QuerySvc, nil,
107-
&QueryOptions{
108-
BearerTokenPropagation: true,
109-
HTTP: confighttp.ServerConfig{
110-
Endpoint: ":0",
111-
},
112-
GRPC: configgrpc.ServerConfig{
113-
NetAddr: confignet.AddrConfig{
114-
Endpoint: ":0",
115-
Transport: confignet.TransportTypeTCP,
116-
},
117-
},
118-
},
119-
tenancy.NewManager(&tenancy.Options{}),
120-
telset,
121-
)
122-
require.NoError(t, err)
123-
require.NoError(t, server.Start(context.Background()))
124-
return server
125-
}
126-
127-
func TestBearerTokenPropagation(t *testing.T) {
128-
testCases := []struct {
129-
name string
130-
headerValue string
131-
headerName string
132-
}{
133-
{name: "Bearer token", headerName: "Authorization", headerValue: bearerHeader},
134-
{name: "Raw Bearer token", headerName: "Authorization", headerValue: bearerToken},
135-
{name: "X-Forwarded-Access-Token", headerName: "X-Forwarded-Access-Token", headerValue: bearerHeader},
136-
}
137-
138-
esSrv := runMockElasticsearchServer(t)
139-
defer esSrv.Close()
140-
t.Logf("mock ES server started on %s", esSrv.URL)
141-
142-
querySrv := runQueryService(t, esSrv.URL)
143-
defer querySrv.Close()
144-
queryAddr := querySrv.httpConn.Addr().String()
145-
// Will try to load service names, this should return 200.
146-
url := fmt.Sprintf("http://%s/api/services", queryAddr)
147-
148-
for _, testCase := range testCases {
149-
t.Run(testCase.name, func(t *testing.T) {
150-
req, err := http.NewRequest(http.MethodGet, url, http.NoBody)
151-
require.NoError(t, err)
152-
req.Header.Add(testCase.headerName, testCase.headerValue)
153-
154-
client := &http.Client{}
155-
resp, err := client.Do(req)
156-
require.NoError(t, err)
157-
require.NotNil(t, resp)
158-
defer resp.Body.Close()
159-
160-
assert.Equal(t, http.StatusOK, resp.StatusCode)
161-
})
162-
}
163-
}
6+
// All tests in this file have been commented out because they depend on
7+
// v1 storage factories that have been removed as dead code.
Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,4 @@
1-
// Copyright (c) 2021 The Jaeger Authors.
1+
// Copyright (c) 2025 The Jaeger Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package disabled
5-
6-
import (
7-
"flag"
8-
9-
"github.com/spf13/viper"
10-
"go.uber.org/zap"
11-
12-
"github.com/jaegertracing/jaeger/internal/storage/v1"
13-
"github.com/jaegertracing/jaeger/internal/storage/v1/api/metricstore"
14-
"github.com/jaegertracing/jaeger/internal/telemetry"
15-
)
16-
17-
var _ storage.Configurable = (*Factory)(nil)
18-
19-
// Factory implements storage.Factory that returns a Disabled metrics reader.
20-
type Factory struct{}
21-
22-
// NewFactory creates a new Factory.
23-
func NewFactory() *Factory {
24-
return &Factory{}
25-
}
26-
27-
// AddFlags implements storage.Configurable.
28-
func (*Factory) AddFlags(_ *flag.FlagSet) {}
29-
30-
// InitFromViper implements storage.Configurable.
31-
func (*Factory) InitFromViper(_ *viper.Viper, _ *zap.Logger) {}
32-
33-
// Initialize implements storage.MetricsFactory.
34-
func (*Factory) Initialize(_ telemetry.Settings) error {
35-
return nil
36-
}
37-
38-
// CreateMetricsReader implements storage.MetricsFactory.
39-
func (*Factory) CreateMetricsReader() (metricstore.Reader, error) {
40-
return NewMetricsReader()
41-
}
Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,4 @@
1-
// Copyright (c) 2021 The Jaeger Authors.
1+
// Copyright (c) 2025 The Jaeger Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package disabled
5-
6-
import (
7-
"testing"
8-
9-
"github.com/stretchr/testify/assert"
10-
"github.com/stretchr/testify/require"
11-
"go.uber.org/zap"
12-
13-
"github.com/jaegertracing/jaeger/internal/storage/v1"
14-
"github.com/jaegertracing/jaeger/internal/telemetry"
15-
)
16-
17-
var _ storage.MetricStoreFactory = new(Factory)
18-
19-
func TestPrometheusFactory(t *testing.T) {
20-
f := NewFactory()
21-
require.NoError(t, f.Initialize(telemetry.NoopSettings()))
22-
23-
err := f.Initialize(telemetry.NoopSettings())
24-
require.NoError(t, err)
25-
26-
f.AddFlags(nil)
27-
f.InitFromViper(nil, zap.NewNop())
28-
29-
reader, err := f.CreateMetricsReader()
30-
require.NoError(t, err)
31-
assert.NotNil(t, reader)
32-
}

internal/storage/metricstore/factory.go

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -3,106 +3,9 @@
33

44
package metricstore
55

6-
import (
7-
"flag"
8-
"fmt"
9-
10-
"github.com/spf13/viper"
11-
"go.uber.org/zap"
12-
13-
"github.com/jaegertracing/jaeger/internal/metrics"
14-
"github.com/jaegertracing/jaeger/internal/storage/metricstore/disabled"
15-
"github.com/jaegertracing/jaeger/internal/storage/metricstore/prometheus"
16-
"github.com/jaegertracing/jaeger/internal/storage/v1"
17-
"github.com/jaegertracing/jaeger/internal/storage/v1/api/metricstore"
18-
"github.com/jaegertracing/jaeger/internal/telemetry"
19-
)
20-
216
const (
22-
// disabledStorageType is the storage type used when METRICS_STORAGE_TYPE is unset.
23-
disabledStorageType = ""
24-
257
prometheusStorageType = "prometheus"
268
)
279

2810
// AllStorageTypes defines all available storage backends.
2911
var AllStorageTypes = []string{prometheusStorageType}
30-
31-
var _ storage.Configurable = (*Factory)(nil)
32-
33-
// Factory implements storage.Factory interface as a meta-factory for storage components.
34-
type Factory struct {
35-
FactoryConfig
36-
factories map[string]storage.V1MetricStoreFactory
37-
}
38-
39-
// NewFactory creates the meta-factory.
40-
func NewFactory(config FactoryConfig) (*Factory, error) {
41-
f := &Factory{FactoryConfig: config}
42-
uniqueTypes := map[string]struct{}{
43-
f.MetricsStorageType: {},
44-
}
45-
f.factories = make(map[string]storage.V1MetricStoreFactory)
46-
for t := range uniqueTypes {
47-
ff, err := f.getFactoryOfType(t)
48-
if err != nil {
49-
return nil, err
50-
}
51-
f.factories[t] = ff
52-
}
53-
return f, nil
54-
}
55-
56-
func (*Factory) getFactoryOfType(factoryType string) (storage.V1MetricStoreFactory, error) {
57-
switch factoryType {
58-
case prometheusStorageType:
59-
return prometheus.NewFactory(), nil
60-
case disabledStorageType:
61-
return disabled.NewFactory(), nil
62-
default:
63-
return nil, fmt.Errorf("unknown metrics type %q. Valid types are %v", factoryType, AllStorageTypes)
64-
}
65-
}
66-
67-
// Initialize implements storage.V1MetricStoreFactory.
68-
func (f *Factory) Initialize(telset telemetry.Settings) error {
69-
for kind, factory := range f.factories {
70-
scopedTelset := telset
71-
scopedTelset.Metrics = telset.Metrics.Namespace(metrics.NSOptions{
72-
Name: "storage",
73-
Tags: map[string]string{
74-
"kind": kind,
75-
"role": "metricstore",
76-
},
77-
})
78-
factory.Initialize(scopedTelset)
79-
}
80-
return nil
81-
}
82-
83-
// CreateMetricsReader implements storage.MetricStoreFactory.
84-
func (f *Factory) CreateMetricsReader() (metricstore.Reader, error) {
85-
factory, ok := f.factories[f.MetricsStorageType]
86-
if !ok {
87-
return nil, fmt.Errorf("no %q backend registered for metrics store", f.MetricsStorageType)
88-
}
89-
return factory.CreateMetricsReader()
90-
}
91-
92-
// AddFlags implements storage.Configurable.
93-
func (f *Factory) AddFlags(flagSet *flag.FlagSet) {
94-
for _, factory := range f.factories {
95-
if conf, ok := factory.(storage.Configurable); ok {
96-
conf.AddFlags(flagSet)
97-
}
98-
}
99-
}
100-
101-
// InitFromViper implements storage.Configurable.
102-
func (f *Factory) InitFromViper(v *viper.Viper, logger *zap.Logger) {
103-
for _, factory := range f.factories {
104-
if conf, ok := factory.(storage.Configurable); ok {
105-
conf.InitFromViper(v, logger)
106-
}
107-
}
108-
}

internal/storage/metricstore/factory_config.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@
33

44
package metricstore
55

6-
import (
7-
"os"
8-
)
9-
106
const (
117
// StorageTypeEnvVar is the name of the env var that defines the type of backend used for metrics storage.
128
StorageTypeEnvVar = "METRICS_STORAGE_TYPE"
@@ -16,10 +12,3 @@ const (
1612
type FactoryConfig struct {
1713
MetricsStorageType string
1814
}
19-
20-
// FactoryConfigFromEnv reads the desired types of storage backends from METRICS_STORAGE_TYPE.
21-
func FactoryConfigFromEnv() FactoryConfig {
22-
return FactoryConfig{
23-
MetricsStorageType: os.Getenv(StorageTypeEnvVar),
24-
}
25-
}
Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,4 @@
1-
// Copyright (c) 2021 The Jaeger Authors.
1+
// Copyright (c) 2025 The Jaeger Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package metricstore
5-
6-
import (
7-
"testing"
8-
9-
"github.com/stretchr/testify/assert"
10-
)
11-
12-
func TestFactoryConfigFromEnv(t *testing.T) {
13-
fc := FactoryConfigFromEnv()
14-
assert.Empty(t, fc.MetricsStorageType)
15-
16-
t.Setenv(StorageTypeEnvVar, prometheusStorageType)
17-
18-
fc = FactoryConfigFromEnv()
19-
assert.Equal(t, prometheusStorageType, fc.MetricsStorageType)
20-
}

0 commit comments

Comments
 (0)