Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[jaeger-v2] Add support for Badger #5112

Merged
merged 42 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
d904638
add support for badger in jaegerV2
akagami-harsh Jan 17, 2024
1d03e46
fix
akagami-harsh Jan 17, 2024
cdec3f7
revert ui_config path
akagami-harsh Jan 17, 2024
9384dc4
add .nocover
akagami-harsh Jan 18, 2024
4f00e75
remove datarecivers
akagami-harsh Jan 18, 2024
43ec3c7
change name to badger_primary
akagami-harsh Jan 18, 2024
40c6e9f
remove unnecessary fields
akagami-harsh Jan 18, 2024
0f35c2e
merge main
akagami-harsh Jan 18, 2024
4849ada
run go mod tidy
akagami-harsh Jan 18, 2024
dbd89fb
Merge branch 'main' into implement-badger-for-v2
akagami-harsh Jan 19, 2024
71b9df8
fix
akagami-harsh Jan 19, 2024
137ff81
Update cmd/jaeger/badger_config.yaml
akagami-harsh Jan 20, 2024
cde4a0e
fix
akagami-harsh Jan 20, 2024
046c433
Merge branch 'main' into implement-badger-for-v2
akagami-harsh Jan 20, 2024
4563f42
fix
akagami-harsh Jan 20, 2024
d07168e
fix
akagami-harsh Jan 21, 2024
e2df247
Update submodule to latest commit
akagami-harsh Jan 21, 2024
babae5b
add test to badger factory
akagami-harsh Jan 21, 2024
d2fe9a4
fix
akagami-harsh Jan 21, 2024
f939154
remove unrelated changes
akagami-harsh Jan 21, 2024
74e94c6
Merge branch 'main' of https://github.com/akagami-harsh/jaeger into i…
akagami-harsh Jan 21, 2024
0735463
fix
akagami-harsh Jan 21, 2024
d388571
update submodules
akagami-harsh Jan 22, 2024
c0c65c7
Update cmd/jaeger/badger_config.yaml
akagami-harsh Jan 22, 2024
90f4671
Update cmd/jaeger/badger_config.yaml
akagami-harsh Jan 22, 2024
27097f0
Update cmd/jaeger/internal/extension/jaegerstorage/config.go
akagami-harsh Jan 22, 2024
a24be8f
Update cmd/jaeger/internal/extension/jaegerstorage/config.go
akagami-harsh Jan 22, 2024
6b70cf5
Update cmd/jaeger/badger_config.yaml
akagami-harsh Jan 22, 2024
10aa09b
fix
akagami-harsh Jan 22, 2024
bf5f528
Merge branch 'implement-badger-for-v2' of https://github.com/akagami-…
akagami-harsh Jan 22, 2024
e3a0740
assign map after error check
akagami-harsh Jan 22, 2024
f2408a6
fix
akagami-harsh Jan 22, 2024
f580d97
add test badger extension
akagami-harsh Jan 22, 2024
aa4e691
Merge branch 'main' into implement-badger-for-v2
akagami-harsh Jan 22, 2024
101015c
fix
akagami-harsh Jan 22, 2024
2c48857
Merge branch 'implement-badger-for-v2' of https://github.com/akagami-…
akagami-harsh Jan 22, 2024
2014840
fix
akagami-harsh Jan 22, 2024
76ae325
Update plugin/storage/badger/factory_test.go
akagami-harsh Jan 22, 2024
424ec72
run make fmt
akagami-harsh Jan 22, 2024
48a5ca2
fix lint
akagami-harsh Jan 22, 2024
014c198
log kafka logs
yurishkuro Jan 23, 2024
f9da1a0
pin kafka to patch number
yurishkuro Jan 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions cmd/jaeger/badger_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
service:
extensions: [jaeger_storage, jaeger_query]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger_storage_exporter]

extensions:
jaeger_query:
trace_storage: badger_main
trace_storage_archive: badger_archive
ui_config: ./cmd/jaeger/config-ui.json

jaeger_storage:
badger:
badger_main:
directory_key: "/tmp/jaeger/"
directory_value: "/tmp/jaeger/"
ephemeral: false
maintenance_interval: 5
metrics_update_interval: 10
badger_archive:
directory_key: "/tmp/jaeger_archive/"
directory_value: "/tmp/jaeger_archive/"
ephemeral: false
maintenance_interval: 5
metrics_update_interval: 10

receivers:
otlp:
protocols:
grpc:
http:

processors:
batch:

exporters:
jaeger_storage_exporter:
trace_storage: badger_main
1 change: 0 additions & 1 deletion cmd/jaeger/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ extensions:
memstore_archive:
max_traces: 100000


receivers:
otlp:
protocols:
Expand Down
4 changes: 3 additions & 1 deletion cmd/jaeger/internal/extension/jaegerstorage/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import (
"reflect"

memoryCfg "github.com/jaegertracing/jaeger/pkg/memory/config"
badgerCfg "github.com/jaegertracing/jaeger/plugin/storage/badger"
)

// Config has the configuration for jaeger-query,
type Config struct {
Memory map[string]memoryCfg.Configuration `mapstructure:"memory"`
Memory map[string]memoryCfg.Configuration `mapstructure:"memory"`
Badger map[string]badgerCfg.NamespaceConfig `mapstructure:"badger"`
// TODO add other storage types here
// TODO how will this work with 3rd party storage implementations?
// Option: instead of looking for specific name, check interface.
Expand Down
18 changes: 18 additions & 0 deletions cmd/jaeger/internal/extension/jaegerstorage/extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"go.uber.org/zap"

"github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/plugin/storage/badger"
"github.com/jaegertracing/jaeger/plugin/storage/memory"
"github.com/jaegertracing/jaeger/storage"
)
Expand Down Expand Up @@ -70,6 +71,23 @@ func (s *storageExt) Start(ctx context.Context, host component.Host) error {
s.logger.With(zap.String("storage_name", name)),
)
}

for name, b := range s.config.Badger {
if _, ok := s.factories[name]; ok {
return fmt.Errorf("duplicate badger storage name %s", name)
}
var err error
factory, err := badger.NewFactoryWithConfig(
b,
metrics.NullFactory,
s.logger.With(zap.String("storage_name", name)),
)
if err != nil {
return fmt.Errorf("failed to initialize badger storage: %w", err)
}
s.factories[name] = factory
}
akagami-harsh marked this conversation as resolved.
Show resolved Hide resolved

// TODO add support for other backends
return nil
}
Expand Down
61 changes: 60 additions & 1 deletion cmd/jaeger/internal/extension/jaegerstorage/extension_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ import (

memoryCfg "github.com/jaegertracing/jaeger/pkg/memory/config"
"github.com/jaegertracing/jaeger/pkg/metrics"
badgerCfg "github.com/jaegertracing/jaeger/plugin/storage/badger"
"github.com/jaegertracing/jaeger/storage"
"github.com/jaegertracing/jaeger/storage/dependencystore"
"github.com/jaegertracing/jaeger/storage/spanstore"
)

const memstoreName = "memstore"
const (
memstoreName = "memstore"
badgerName = "badgerstore"
)

type storageHost struct {
t *testing.T
Expand Down Expand Up @@ -129,6 +133,61 @@ func TestStorageExtension(t *testing.T) {
require.NoError(t, err)
}

func TestBadgerStorageExtension(t *testing.T) {
ctx := context.Background()
telemetrySettings := component.TelemetrySettings{
Logger: zap.NewNop(),
TracerProvider: nooptrace.NewTracerProvider(),
MeterProvider: noopmetric.NewMeterProvider(),
}

config := &Config{
Badger: map[string]badgerCfg.NamespaceConfig{
badgerName: {
Ephemeral: true,
MaintenanceInterval: 5,
MetricsUpdateInterval: 10,
},
},
}

require.NoError(t, config.Validate())

extensionFactory := NewFactory()
storageExtension, err := extensionFactory.CreateExtension(ctx, extension.CreateSettings{
ID: ID,
TelemetrySettings: telemetrySettings,
BuildInfo: component.NewDefaultBuildInfo(),
}, config)
require.NoError(t, err)

host := componenttest.NewNopHost()
err = storageExtension.Start(ctx, host)
require.NoError(t, err)

err = storageExtension.Start(ctx, host)
t.Cleanup(func() { require.NoError(t, storageExtension.Shutdown(ctx)) })
require.Error(t, err)
require.EqualError(t, err, fmt.Sprintf("duplicate badger storage name %s", badgerName))
}

func TestBadgerStorageExtensionError(t *testing.T) {
ctx := context.Background()
factory, _ := badgerCfg.NewFactoryWithConfig(badgerCfg.NamespaceConfig{}, metrics.NullFactory, zap.NewNop())
ext := storageExt{
config: &Config{
Badger: map[string]badgerCfg.NamespaceConfig{
badgerName: {},
},
},
logger: zap.NewNop(),
factories: map[string]storage.Factory{"badger": factory},
}
err := ext.Start(ctx, componenttest.NewNopHost())
require.Error(t, err)
require.EqualError(t, err, "failed to initialize badger storage: Error Creating Dir: \"\" error: mkdir : no such file or directory")
}

func makeStorageExtension(t *testing.T, memstoreName string) component.Component {
extensionFactory := NewFactory()

Expand Down
14 changes: 14 additions & 0 deletions plugin/storage/badger/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,20 @@ func NewFactory() *Factory {
}
}

func NewFactoryWithConfig(
cfg NamespaceConfig,
metricsFactory metrics.Factory,
logger *zap.Logger,
) (*Factory, error) {
f := NewFactory()
f.InitFromOptions(Options{Primary: cfg})
err := f.Initialize(metricsFactory, logger)
if err != nil {
return nil, err
}
return f, nil
}

// AddFlags implements plugin.Configurable
func (f *Factory) AddFlags(flagSet *flag.FlagSet) {
f.Options.AddFlags(flagSet)
Expand Down
20 changes: 20 additions & 0 deletions plugin/storage/badger/factory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,23 @@ func TestInitFromOptions(t *testing.T) {
f.InitFromOptions(opts)
assert.Equal(t, &opts, f.Options)
}

func TestBadgerStorageFactoryWithConfig(t *testing.T) {
cfg := NamespaceConfig{}
_, err := NewFactoryWithConfig(cfg, metrics.NullFactory, zap.NewNop())
require.Error(t, err)
require.ErrorContains(t, err, "Error Creating Dir")

tmp := os.TempDir()
defer os.Remove(tmp)
cfg = NamespaceConfig{
ValueDirectory: tmp,
KeyDirectory: tmp,
Ephemeral: false,
MaintenanceInterval: 5,
MetricsUpdateInterval: 10,
}
factory, err := NewFactoryWithConfig(cfg, metrics.NullFactory, zap.NewNop())
require.NoError(t, err)
defer factory.Close()
}
Loading