From 9d2f9b21b8b374f74135ba1bc424e17dca745cff Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Sat, 20 Jul 2024 19:56:46 -0400 Subject: [PATCH] DRY code, rename public methods to be more consistent Signed-off-by: Yuri Shkuro --- .../storageexporter/exporter_test.go | 6 +- .../extension/jaegerquery/server_test.go | 4 +- .../extension/jaegerstorage/extension.go | 64 ++++++++++--------- .../storagecleaner/extension_test.go | 4 +- 4 files changed, 42 insertions(+), 36 deletions(-) diff --git a/cmd/jaeger/internal/exporters/storageexporter/exporter_test.go b/cmd/jaeger/internal/exporters/storageexporter/exporter_test.go index e25acce59a5..54dedab391e 100644 --- a/cmd/jaeger/internal/exporters/storageexporter/exporter_test.go +++ b/cmd/jaeger/internal/exporters/storageexporter/exporter_test.go @@ -44,6 +44,8 @@ type mockStorageExt struct { metricsFactory *factoryMocks.MetricsFactory } +var _ jaegerstorage.Extension = (*mockStorageExt)(nil) + func (*mockStorageExt) Start(context.Context, component.Host) error { panic("not implemented") } @@ -52,14 +54,14 @@ func (*mockStorageExt) Shutdown(context.Context) error { panic("not implemented") } -func (m *mockStorageExt) Factory(name string) (storage.Factory, bool) { +func (m *mockStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) { if m.name == name { return m.factory, true } return nil, false } -func (m *mockStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) { +func (m *mockStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) { if m.name == name { return m.metricsFactory, true } diff --git a/cmd/jaeger/internal/extension/jaegerquery/server_test.go b/cmd/jaeger/internal/extension/jaegerquery/server_test.go index 34a7757906a..99b9e17e4c8 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/server_test.go +++ b/cmd/jaeger/internal/extension/jaegerquery/server_test.go @@ -87,14 +87,14 @@ type fakeStorageExt struct{} var _ jaegerstorage.Extension = (*fakeStorageExt)(nil) -func (fakeStorageExt) Factory(name string) (storage.Factory, bool) { +func (fakeStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) { if name == "need-factory-error" { return nil, false } return fakeFactory{name: name}, true } -func (fakeStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) { +func (fakeStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) { if name == "need-factory-error" { return nil, false } diff --git a/cmd/jaeger/internal/extension/jaegerstorage/extension.go b/cmd/jaeger/internal/extension/jaegerstorage/extension.go index 373a49d0d0d..5e8d1061349 100644 --- a/cmd/jaeger/internal/extension/jaegerstorage/extension.go +++ b/cmd/jaeger/internal/extension/jaegerstorage/extension.go @@ -28,8 +28,8 @@ var _ Extension = (*storageExt)(nil) type Extension interface { extension.Extension - Factory(name string) (storage.Factory, bool) - MetricsFactory(name string) (storage.MetricsFactory, bool) + TraceStorageFactory(name string) (storage.Factory, bool) + MetricStorageFactory(name string) (storage.MetricsFactory, bool) } type storageExt struct { @@ -41,20 +41,11 @@ type storageExt struct { // GetStorageFactory locates the extension in Host and retrieves a storage factory from it with the given name. func GetStorageFactory(name string, host component.Host) (storage.Factory, error) { - var comp component.Component - for id, ext := range host.GetExtensions() { - if id.Type() == componentType { - comp = ext - break - } - } - if comp == nil { - return nil, fmt.Errorf( - "cannot find extension '%s' (make sure it's defined earlier in the config)", - componentType, - ) + ext, err := findExtension(host) + if err != nil { + return nil, err } - f, ok := comp.(Extension).Factory(name) + f, ok := ext.TraceStorageFactory(name) if !ok { return nil, fmt.Errorf( "cannot find definition of storage '%s' in the configuration for extension '%s'", @@ -66,20 +57,11 @@ func GetStorageFactory(name string, host component.Host) (storage.Factory, error // GetMetricsFactory locates the extension in Host and retrieves a metrics factory from it with the given name. func GetMetricsFactory(name string, host component.Host) (storage.MetricsFactory, error) { - var comp component.Component - for id, ext := range host.GetExtensions() { - if id.Type() == componentType { - comp = ext - break - } - } - if comp == nil { - return nil, fmt.Errorf( - "cannot find extension '%s' (make sure it's defined earlier in the config)", - componentType, - ) + ext, err := findExtension(host) + if err != nil { + return nil, err } - mf, ok := comp.(Extension).MetricsFactory(name) + mf, ok := ext.MetricStorageFactory(name) if !ok { return nil, fmt.Errorf( "cannot find metric storage '%s' declared by '%s' extension", @@ -98,6 +80,28 @@ func GetStorageFactoryV2(name string, host component.Host) (spanstore.Factory, e return factoryadapter.NewFactory(f), nil } +func findExtension(host component.Host) (Extension, error) { + var id component.ID + var comp component.Component + for i, ext := range host.GetExtensions() { + if i.Type() == componentType { + id, comp = i, ext + break + } + } + if comp == nil { + return nil, fmt.Errorf( + "cannot find extension '%s' (make sure it's defined earlier in the config)", + componentType, + ) + } + ext, ok := comp.(Extension) + if !ok { + return nil, fmt.Errorf("extension '%s' is not of expected type '%s'", id, componentType) + } + return ext, nil +} + func newStorageExt(config *Config, telset component.TelemetrySettings) *storageExt { return &storageExt{ config: config, @@ -163,12 +167,12 @@ func (s *storageExt) Shutdown(context.Context) error { return errors.Join(errs...) } -func (s *storageExt) Factory(name string) (storage.Factory, bool) { +func (s *storageExt) TraceStorageFactory(name string) (storage.Factory, bool) { f, ok := s.factories[name] return f, ok } -func (s *storageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) { +func (s *storageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) { mf, ok := s.metricsFactories[name] return mf, ok } diff --git a/cmd/jaeger/internal/integration/storagecleaner/extension_test.go b/cmd/jaeger/internal/integration/storagecleaner/extension_test.go index b95b21b69f5..4c130fdc245 100644 --- a/cmd/jaeger/internal/integration/storagecleaner/extension_test.go +++ b/cmd/jaeger/internal/integration/storagecleaner/extension_test.go @@ -50,14 +50,14 @@ func (*mockStorageExt) Shutdown(context.Context) error { panic("not implemented") } -func (m *mockStorageExt) Factory(name string) (storage.Factory, bool) { +func (m *mockStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) { if m.name == name { return m.factory, true } return nil, false } -func (m *mockStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) { +func (m *mockStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) { if m.name == name { return m.metricsFactory, true }