From e1184dcaa75ea6a994d707992e92f6ceb97f222c Mon Sep 17 00:00:00 2001 From: Daniil Rutskiy Date: Mon, 28 Sep 2020 10:50:27 +0300 Subject: [PATCH] Use fork.Factory to store internal options Delete direct expvar calls. Vendor latest jaeger-lib. Signed-off-by: Daniil Rutskiy --- cmd/agent/app/agent_test.go | 7 +++-- cmd/agent/app/builder.go | 22 +++++++-------- cmd/agent/app/builder_test.go | 37 +++++++++++++------------ cmd/agent/main.go | 9 ++++-- cmd/all-in-one/main.go | 7 ++++- cmd/collector/app/builder_flags.go | 11 -------- cmd/collector/app/builder_flags_test.go | 17 ------------ cmd/collector/app/collector.go | 7 +++++ cmd/collector/app/collector_test.go | 37 +++++++++++++++++++++++++ cmd/collector/main.go | 6 +++- cmd/opentelemetry/go.mod | 2 +- cmd/opentelemetry/go.sum | 3 ++ go.mod | 3 +- go.sum | 4 +++ plugin/storage/factory.go | 13 ++++----- plugin/storage/factory_test.go | 34 +++++++++++------------ plugin/storage/memory/factory.go | 8 ++++++ plugin/storage/memory/factory_test.go | 23 ++++++++++++++- plugin/storage/memory/options.go | 8 ------ plugin/storage/memory/options_test.go | 14 ---------- 20 files changed, 159 insertions(+), 113 deletions(-) diff --git a/cmd/agent/app/agent_test.go b/cmd/agent/app/agent_test.go index 52a092c51b5..b31346feb53 100644 --- a/cmd/agent/app/agent_test.go +++ b/cmd/agent/app/agent_test.go @@ -27,6 +27,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/uber/jaeger-lib/metrics" + "github.com/uber/jaeger-lib/metrics/fork" "go.uber.org/zap" jmetrics "github.com/jaegertracing/jaeger/pkg/metrics" @@ -100,7 +101,8 @@ func withRunningAgent(t *testing.T, testcase func(string, chan error)) { } logger, logBuf := testutils.NewLogger() mBldr := &jmetrics.Builder{HTTPRoute: "/metrics", Backend: "prometheus"} - mFactory, err := mBldr.CreateMetricsFactory("jaeger") + metricsFactory, err := mBldr.CreateMetricsFactory("jaeger") + mFactory := fork.New("internal", metrics.NullFactory, metricsFactory) require.NoError(t, err) agent, err := cfg.CreateAgent(fakeCollectorProxy{}, logger, mFactory) require.NoError(t, err) @@ -162,7 +164,8 @@ func TestStartStopRace(t *testing.T) { } logger, logBuf := testutils.NewLogger() mBldr := &jmetrics.Builder{HTTPRoute: "/metrics", Backend: "prometheus"} - mFactory, err := mBldr.CreateMetricsFactory("jaeger") + metricsFactory, err := mBldr.CreateMetricsFactory("jaeger") + mFactory := fork.New("internal", metrics.NullFactory, metricsFactory) require.NoError(t, err) agent, err := cfg.CreateAgent(fakeCollectorProxy{}, logger, mFactory) require.NoError(t, err) diff --git a/cmd/agent/app/builder.go b/cmd/agent/app/builder.go index 8044ed6d13c..010edf7e02a 100644 --- a/cmd/agent/app/builder.go +++ b/cmd/agent/app/builder.go @@ -16,7 +16,6 @@ package app import ( - "expvar" "fmt" "io" "net/http" @@ -113,7 +112,8 @@ func (b *Builder) CreateAgent(primaryProxy CollectorProxy, logger *zap.Logger, m return nil, fmt.Errorf("cannot create processors: %w", err) } server := b.HTTPServer.getHTTPServer(primaryProxy.GetManager(), mFactory) - b.setExpvarOptions() + b.setExpvarOptions(mFactory) + return NewAgent(processors, server, logger), nil } @@ -129,18 +129,16 @@ func (b *Builder) getReporter(primaryProxy CollectorProxy) reporter.Reporter { return reporter.NewMultiReporter(rep...) } -func (b *Builder) setExpvarOptions() { +func (b *Builder) setExpvarOptions(mFactory metrics.Factory) { + internalFactory := mFactory.Namespace(metrics.NSOptions{Name: "internal"}) for _, p := range b.Processors { prefix := fmt.Sprintf(processorPrefixFmt, p.Model, p.Protocol) - if expvar.Get(prefix+suffixServerMaxPacketSize) == nil { - expvar.NewInt(prefix + suffixServerMaxPacketSize).Set(int64(p.Server.MaxPacketSize)) - } - if expvar.Get(prefix+suffixServerQueueSize) == nil { - expvar.NewInt(prefix + suffixServerQueueSize).Set(int64(p.Server.QueueSize)) - } - if expvar.Get(prefix+suffixWorkers) == nil { - expvar.NewInt(prefix + suffixWorkers).Set(int64(p.Workers)) - } + internalFactory.Gauge(metrics.Options{Name: prefix + suffixServerMaxPacketSize}). + Update(int64(p.Server.MaxPacketSize)) + internalFactory.Gauge(metrics.Options{Name: prefix + suffixServerQueueSize}). + Update(int64(p.Server.QueueSize)) + internalFactory.Gauge(metrics.Options{Name: prefix + suffixWorkers}). + Update(int64(p.Workers)) } } diff --git a/cmd/agent/app/builder_test.go b/cmd/agent/app/builder_test.go index 81534106aed..edcdfbb6478 100644 --- a/cmd/agent/app/builder_test.go +++ b/cmd/agent/app/builder_test.go @@ -18,10 +18,8 @@ package app import ( "context" "errors" - "expvar" "flag" "fmt" - "strconv" "strings" "testing" "time" @@ -31,6 +29,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/uber/jaeger-lib/metrics" + "github.com/uber/jaeger-lib/metrics/fork" "github.com/uber/jaeger-lib/metrics/metricstest" "go.uber.org/zap" yaml "gopkg.in/yaml.v2" @@ -282,13 +281,12 @@ func TestCreateCollectorProxy_UnknownReporter(t *testing.T) { func TestSetExpvarOptions(t *testing.T) { v := viper.New() - b := &Builder{} + cfg := &Builder{} command := cobra.Command{} flags := &flag.FlagSet{} AddFlags(flags) command.PersistentFlags().AddGoFlagSet(flags) v.BindPFlags(command.PersistentFlags()) - err := command.ParseFlags([]string{ "--http-server.host-port=:8080", "--processor.jaeger-binary.server-host-port=:1111", @@ -297,20 +295,25 @@ func TestSetExpvarOptions(t *testing.T) { "--processor.jaeger-binary.workers=42", }) require.NoError(t, err) + cfg.InitFromViper(v) - b.InitFromViper(v) - b.setExpvarOptions() - - gotMaxPacketSize, err := strconv.Atoi(expvar.Get("processor.jaeger-binary.server-max-packet-size").String()) - assert.NoError(t, err) - - gotQueueSize, err := strconv.Atoi(expvar.Get("processor.jaeger-binary.server-queue-size").String()) - assert.NoError(t, err) - - gotWorkers, err := strconv.Atoi(expvar.Get("processor.jaeger-binary.workers").String()) + baseMetrics := metricstest.NewFactory(time.Second) + forkFactory := metricstest.NewFactory(time.Second) + metricsFactory := fork.New("internal", forkFactory, baseMetrics) + agent, err := cfg.CreateAgent(fakeCollectorProxy{}, zap.NewNop(), metricsFactory) assert.NoError(t, err) + assert.NotNil(t, agent) - assert.Equal(t, 4242, gotMaxPacketSize) - assert.Equal(t, 24, gotQueueSize) - assert.Equal(t, 42, gotWorkers) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal.processor.jaeger-binary.server-max-packet-size", + Value: 4242, + }) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal.processor.jaeger-binary.server-queue-size", + Value: 24, + }) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal.processor.jaeger-binary.workers", + Value: 42, + }) } diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 2b3049063e0..e0d54d8af73 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -22,6 +22,8 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/uber/jaeger-lib/metrics" + jexpvar "github.com/uber/jaeger-lib/metrics/expvar" + "github.com/uber/jaeger-lib/metrics/fork" _ "go.uber.org/automaxprocs" "go.uber.org/zap" @@ -49,9 +51,10 @@ func main() { return err } logger := svc.Logger // shortcut - mFactory := svc.MetricsFactory. - Namespace(metrics.NSOptions{Name: "jaeger"}). - Namespace(metrics.NSOptions{Name: "agent"}) + baseFactory := svc.MetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}) + mFactory := fork.New("internal", + jexpvar.NewFactory(10).Namespace(metrics.NSOptions{}), // backend for internal opts + baseFactory.Namespace(metrics.NSOptions{Name: "agent"})) rOpts := new(reporter.Options).InitFromViper(v, logger) grpcBuilder := grpc.NewConnBuilder().InitFromViper(v) diff --git a/cmd/all-in-one/main.go b/cmd/all-in-one/main.go index 864d7e1d974..5cab00812c4 100644 --- a/cmd/all-in-one/main.go +++ b/cmd/all-in-one/main.go @@ -27,6 +27,8 @@ import ( jaegerClientConfig "github.com/uber/jaeger-client-go/config" jaegerClientZapLog "github.com/uber/jaeger-client-go/log/zap" "github.com/uber/jaeger-lib/metrics" + jexpvar "github.com/uber/jaeger-lib/metrics/expvar" + "github.com/uber/jaeger-lib/metrics/fork" _ "go.uber.org/automaxprocs" "go.uber.org/zap" @@ -81,7 +83,10 @@ by default uses only in-memory database.`, } logger := svc.Logger // shortcut rootMetricsFactory := svc.MetricsFactory // shortcut - metricsFactory := rootMetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}) + metricsFactory := fork.New("internal", + jexpvar.NewFactory(10).Namespace(metrics.NSOptions{}), // backend for internal opts + rootMetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"})) + tracerCloser := initTracer(rootMetricsFactory, svc.Logger) storageFactory.InitFromViper(v) diff --git a/cmd/collector/app/builder_flags.go b/cmd/collector/app/builder_flags.go index c56a05ec5f8..82e4df5ae32 100644 --- a/cmd/collector/app/builder_flags.go +++ b/cmd/collector/app/builder_flags.go @@ -16,7 +16,6 @@ package app import ( - "expvar" "flag" "github.com/spf13/viper" @@ -117,16 +116,6 @@ func (cOpts *CollectorOptions) InitFromViper(v *viper.Viper) *CollectorOptions { cOpts.CollectorZipkinAllowedOrigins = v.GetString(collectorZipkinAllowedOrigins) cOpts.CollectorZipkinAllowedHeaders = v.GetString(collectorZipkinAllowedHeaders) cOpts.TLS = tlsFlagsConfig.InitFromViper(v) - cOpts.setExpvarOptions() return cOpts } - -func (cOpts *CollectorOptions) setExpvarOptions() { - if expvar.Get(collectorNumWorkers) == nil { - expvar.NewInt(collectorNumWorkers).Set(int64(cOpts.NumWorkers)) - } - if expvar.Get(collectorQueueSize) == nil { - expvar.NewInt(collectorQueueSize).Set(int64(cOpts.QueueSize)) - } -} diff --git a/cmd/collector/app/builder_flags_test.go b/cmd/collector/app/builder_flags_test.go index 503bc7a1805..0ffa0e8ec1b 100644 --- a/cmd/collector/app/builder_flags_test.go +++ b/cmd/collector/app/builder_flags_test.go @@ -15,8 +15,6 @@ package app import ( - "expvar" - "strconv" "testing" "github.com/stretchr/testify/assert" @@ -53,18 +51,3 @@ func TestCollectorOptionsWithFlags_CheckFullHostPort(t *testing.T) { assert.Equal(t, "127.0.0.1:1234", c.CollectorGRPCHostPort) assert.Equal(t, "0.0.0.0:3456", c.CollectorZipkinHTTPHostPort) } - -func TestCollectorOptionsWithFlags_CheckExpvarOptions(t *testing.T) { - c := &CollectorOptions{} - v, _ := config.Viperize(AddFlags) - c.InitFromViper(v) - - gotNumWorkers, err := strconv.Atoi(expvar.Get("collector.num-workers").String()) - assert.NoError(t, err) - - gotQueueSize, err := strconv.Atoi(expvar.Get("collector.queue-size").String()) - assert.NoError(t, err) - - assert.Equal(t, DefaultNumWorkers, gotNumWorkers) - assert.Equal(t, DefaultQueueSize, gotQueueSize) -} diff --git a/cmd/collector/app/collector.go b/cmd/collector/app/collector.go index 9f08e285b53..c476d3a5c51 100644 --- a/cmd/collector/app/collector.go +++ b/cmd/collector/app/collector.go @@ -122,10 +122,17 @@ func (c *Collector) Start(builderOpts *CollectorOptions) error { } else { c.zkServer = zkServer } + c.setExpvarOptions(builderOpts) return nil } +func (c *Collector) setExpvarOptions(cOpts *CollectorOptions) { + internalFactory := c.metricsFactory.Namespace(metrics.NSOptions{Name: "internal"}) + internalFactory.Gauge(metrics.Options{Name: collectorNumWorkers}).Update(int64(cOpts.NumWorkers)) + internalFactory.Gauge(metrics.Options{Name: collectorQueueSize}).Update(int64(cOpts.QueueSize)) +} + // Close the component and all its underlying dependencies func (c *Collector) Close() error { // gRPC server diff --git a/cmd/collector/app/collector_test.go b/cmd/collector/app/collector_test.go index 98f876af9d3..2594cb1ba29 100644 --- a/cmd/collector/app/collector_test.go +++ b/cmd/collector/app/collector_test.go @@ -21,6 +21,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/uber/jaeger-lib/metrics/fork" "github.com/uber/jaeger-lib/metrics/metricstest" "go.uber.org/zap" @@ -61,3 +62,39 @@ type mockStrategyStore struct { func (m *mockStrategyStore) GetSamplingStrategy(_ context.Context, serviceName string) (*sampling.SamplingStrategyResponse, error) { return &sampling.SamplingStrategyResponse{}, nil } + +func TestCollector_SetExpvarOptions(t *testing.T) { + // prepare + hc := healthcheck.New() + logger := zap.NewNop() + baseMetrics := metricstest.NewFactory(time.Second) + forkFactory := metricstest.NewFactory(time.Second) + metricsFactory := fork.New("internal", forkFactory, baseMetrics) + spanWriter := &fakeSpanWriter{} + strategyStore := &mockStrategyStore{} + + c := New(&CollectorParams{ + ServiceName: "collector", + Logger: logger, + MetricsFactory: metricsFactory, + SpanWriter: spanWriter, + StrategyStore: strategyStore, + HealthCheck: hc, + }) + collectorOpts := &CollectorOptions{ + NumWorkers: 24, + QueueSize: 42, + } + + c.Start(collectorOpts) + defer c.Close() + + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal.collector.num-workers", + Value: 24, + }) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal.collector.queue-size", + Value: 42, + }) +} diff --git a/cmd/collector/main.go b/cmd/collector/main.go index 1d42f4e6d37..d1ef5c32aeb 100644 --- a/cmd/collector/main.go +++ b/cmd/collector/main.go @@ -24,6 +24,8 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/uber/jaeger-lib/metrics" + jexpvar "github.com/uber/jaeger-lib/metrics/expvar" + "github.com/uber/jaeger-lib/metrics/fork" _ "go.uber.org/automaxprocs" "go.uber.org/zap" @@ -63,7 +65,9 @@ func main() { } logger := svc.Logger // shortcut baseFactory := svc.MetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}) - metricsFactory := baseFactory.Namespace(metrics.NSOptions{Name: "collector"}) + metricsFactory := fork.New("internal", + jexpvar.NewFactory(10).Namespace(metrics.NSOptions{}), // backend for internal opts + baseFactory.Namespace(metrics.NSOptions{Name: "collector"})) storageFactory.InitFromViper(v) if err := storageFactory.Initialize(baseFactory, logger); err != nil { diff --git a/cmd/opentelemetry/go.mod b/cmd/opentelemetry/go.mod index 8eb93df2802..325bca3af6d 100644 --- a/cmd/opentelemetry/go.mod +++ b/cmd/opentelemetry/go.mod @@ -15,7 +15,7 @@ require ( github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.6.1 github.com/uber/jaeger-client-go v2.25.0+incompatible - github.com/uber/jaeger-lib v2.2.0+incompatible + github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible go.opencensus.io v0.22.4 go.opentelemetry.io/collector v0.10.1-0.20200917170114-639b9a80ed46 go.uber.org/zap v1.16.0 diff --git a/cmd/opentelemetry/go.sum b/cmd/opentelemetry/go.sum index 6c870f29907..6065d108b97 100644 --- a/cmd/opentelemetry/go.sum +++ b/cmd/opentelemetry/go.sum @@ -76,6 +76,7 @@ github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/uf github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5 h1:XTrzB+F8+SpRmbhAH8HLxhiiG6nYNwaBZjrFps1oWEk= github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -1109,6 +1110,8 @@ github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24sz github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible h1:pif0W8e7IYk2xPZ/KYV8kqDP9aKsUJ/isUON9dDXkVE= +github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= diff --git a/go.mod b/go.mod index ebbcfa555dd..1c4e71df754 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.14 require ( github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/DataDog/zstd v1.4.4 // indirect + github.com/HdrHistogram/hdrhistogram-go v0.9.0 // indirect github.com/Shopify/sarama v1.22.2-0.20190604114437-cd910a683f9f github.com/apache/thrift v0.13.0 github.com/bsm/sarama-cluster v2.1.13+incompatible @@ -66,7 +67,7 @@ require ( github.com/spf13/viper v1.6.2 github.com/stretchr/testify v1.5.1 github.com/uber/jaeger-client-go v2.23.1+incompatible - github.com/uber/jaeger-lib v2.2.0+incompatible + github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible github.com/vektra/mockery v0.0.0-20181123154057-e78b021dcbb5 github.com/wadey/gocovmerge v0.0.0-20160331181800-b5bfa59ec0ad go.mongodb.org/mongo-driver v1.3.2 // indirect diff --git a/go.sum b/go.sum index d3fb5736345..1d020a9f89d 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.4 h1:+IawcoXhCBylN7ccwdwf8LOH2jKq7NavGpEPanrlTzE= github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/HdrHistogram/hdrhistogram-go v0.9.0 h1:dpujRju0R4M/QZzcnR1LH1qm+TVG3UzkWdp5tH1WMcg= +github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -562,6 +564,8 @@ github.com/uber/jaeger-client-go v2.23.1+incompatible h1:uArBYHQR0HqLFFAypI7RsWT github.com/uber/jaeger-client-go v2.23.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible h1:pif0W8e7IYk2xPZ/KYV8kqDP9aKsUJ/isUON9dDXkVE= +github.com/uber/jaeger-lib v2.3.1-0.20200925164221-2cac3b34a519+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= diff --git a/plugin/storage/factory.go b/plugin/storage/factory.go index 10fbe8c1e5a..e16b5da3085 100644 --- a/plugin/storage/factory.go +++ b/plugin/storage/factory.go @@ -16,7 +16,6 @@ package storage import ( - "expvar" "flag" "fmt" "io" @@ -114,6 +113,7 @@ func (f *Factory) Initialize(metricsFactory metrics.Factory, logger *zap.Logger) } } f.setExpvarOptions() + return nil } @@ -254,10 +254,9 @@ func (f *Factory) Close() error { } func (f *Factory) setExpvarOptions() { - if expvar.Get(downsamplingRatio) == nil { - expvar.NewFloat(downsamplingRatio).Set(f.FactoryConfig.DownsamplingRatio) - } - if expvar.Get(spanStorageType) == nil { - expvar.NewString(spanStorageType).Set(f.SpanReaderType) - } + internalFactory := f.metricsFactory.Namespace(metrics.NSOptions{Name: "internal"}) + internalFactory.Gauge(metrics.Options{Name: downsamplingRatio}). + Update(int64(f.FactoryConfig.DownsamplingRatio)) + internalFactory.Gauge(metrics.Options{Name: spanStorageType + "." + f.SpanReaderType}). + Update(1) } diff --git a/plugin/storage/factory_test.go b/plugin/storage/factory_test.go index 6932c9ab49c..2bb143d9e17 100644 --- a/plugin/storage/factory_test.go +++ b/plugin/storage/factory_test.go @@ -17,19 +17,20 @@ package storage import ( "errors" - "expvar" "flag" "fmt" "io" "reflect" - "strconv" "strings" "testing" + "time" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/uber/jaeger-lib/metrics" + "github.com/uber/jaeger-lib/metrics/fork" + "github.com/uber/jaeger-lib/metrics/metricstest" "go.uber.org/zap" "github.com/jaegertracing/jaeger/pkg/config" @@ -355,24 +356,23 @@ func TestParsingDownsamplingRatio(t *testing.T) { func TestSetExpvarOptions(t *testing.T) { f, err := NewFactory(defaultCfg()) require.NoError(t, err) - assert.NotEmpty(t, f.factories) - assert.NotEmpty(t, f.factories[cassandraStorageType]) - - mock := new(mocks.Factory) - f.factories[cassandraStorageType] = mock - m := metrics.NullFactory - l := zap.NewNop() - mock.On("Initialize", m, l).Return(nil) - assert.NoError(t, f.Initialize(m, l)) + baseMetrics := metricstest.NewFactory(time.Second) + forkFactory := metricstest.NewFactory(time.Second) + metricsFactory := fork.New("internal", forkFactory, baseMetrics) + f.metricsFactory = metricsFactory - gotSpanStorageType := expvar.Get(spanStorageType).String() - gotDownsamplingRatio, err := strconv.ParseFloat(expvar.Get(downsamplingRatio).String(), 64) - assert.NoError(t, err) + // This method is called inside factory.Initialize method + f.setExpvarOptions() - assert.Equal(t, f.DownsamplingRatio, gotDownsamplingRatio) - // Normalize storage type because String method returns a JSON value - assert.Equal(t, f.SpanReaderType, strings.Replace(gotSpanStorageType, "\"", "", -1)) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal." + downsamplingRatio, + Value: int(f.DownsamplingRatio), + }) + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: strings.Join([]string{"internal", spanStorageType, f.SpanReaderType}, "."), + Value: 1, + }) } type errorCloseFactory struct { diff --git a/plugin/storage/memory/factory.go b/plugin/storage/memory/factory.go index fa9fb4c5a06..bd446297fb5 100644 --- a/plugin/storage/memory/factory.go +++ b/plugin/storage/memory/factory.go @@ -59,6 +59,8 @@ func (f *Factory) Initialize(metricsFactory metrics.Factory, logger *zap.Logger) f.metricsFactory, f.logger = metricsFactory, logger f.store = WithConfiguration(f.options.Configuration) logger.Info("Memory storage initialized", zap.Any("configuration", f.store.config)) + f.setExpvarOptions() + return nil } @@ -76,3 +78,9 @@ func (f *Factory) CreateSpanWriter() (spanstore.Writer, error) { func (f *Factory) CreateDependencyReader() (dependencystore.Reader, error) { return f.store, nil } + +func (f *Factory) setExpvarOptions() { + internalFactory := f.metricsFactory.Namespace(metrics.NSOptions{Name: "internal"}) + internalFactory.Gauge(metrics.Options{Name: limit}). + Update(int64(f.options.Configuration.MaxTraces)) +} diff --git a/plugin/storage/memory/factory_test.go b/plugin/storage/memory/factory_test.go index a7ecd5f33e7..45a3ca42fb5 100644 --- a/plugin/storage/memory/factory_test.go +++ b/plugin/storage/memory/factory_test.go @@ -17,8 +17,12 @@ package memory import ( "testing" + "time" "github.com/stretchr/testify/assert" + "github.com/uber/jaeger-lib/metrics" + "github.com/uber/jaeger-lib/metrics/fork" + "github.com/uber/jaeger-lib/metrics/metricstest" "go.uber.org/zap" "github.com/jaegertracing/jaeger/pkg/config" @@ -29,7 +33,7 @@ var _ storage.Factory = new(Factory) func TestMemoryStorageFactory(t *testing.T) { f := NewFactory() - assert.NoError(t, f.Initialize(nil, zap.NewNop())) + assert.NoError(t, f.Initialize(metrics.NullFactory, zap.NewNop())) assert.NotNil(t, f.store) reader, err := f.CreateSpanReader() assert.NoError(t, err) @@ -56,3 +60,20 @@ func TestInitFromOptions(t *testing.T) { f.InitFromOptions(o) assert.Equal(t, o, f.options) } + +func TestSetExpvarOptions(t *testing.T) { + f := NewFactory() + v, command := config.Viperize(f.AddFlags) + command.ParseFlags([]string{"--memory.max-traces=100"}) + f.InitFromViper(v) + + baseMetrics := metricstest.NewFactory(time.Second) + forkFactory := metricstest.NewFactory(time.Second) + metricsFactory := fork.New("internal", forkFactory, baseMetrics) + assert.NoError(t, f.Initialize(metricsFactory, zap.NewNop())) + + forkFactory.AssertGaugeMetrics(t, metricstest.ExpectedMetric{ + Name: "internal." + limit, + Value: f.options.Configuration.MaxTraces, + }) +} diff --git a/plugin/storage/memory/options.go b/plugin/storage/memory/options.go index 48fab9547e5..d2ec03d21b4 100644 --- a/plugin/storage/memory/options.go +++ b/plugin/storage/memory/options.go @@ -15,7 +15,6 @@ package memory import ( - "expvar" "flag" "github.com/spf13/viper" @@ -38,11 +37,4 @@ func AddFlags(flagSet *flag.FlagSet) { // InitFromViper initializes the options struct with values from Viper func (opt *Options) InitFromViper(v *viper.Viper) { opt.Configuration.MaxTraces = v.GetInt(limit) - opt.setExpvarOptions() -} - -func (opt *Options) setExpvarOptions() { - if expvar.Get(limit) == nil { - expvar.NewInt(limit).Set(int64(opt.Configuration.MaxTraces)) - } } diff --git a/plugin/storage/memory/options_test.go b/plugin/storage/memory/options_test.go index f634bc91229..4aede1048ed 100644 --- a/plugin/storage/memory/options_test.go +++ b/plugin/storage/memory/options_test.go @@ -15,8 +15,6 @@ package memory import ( - "expvar" - "strconv" "testing" "github.com/stretchr/testify/assert" @@ -32,15 +30,3 @@ func TestOptionsWithFlags(t *testing.T) { assert.Equal(t, 100, opts.Configuration.MaxTraces) } - -func TestOptionsWithFlags_CheckExpvarOptions(t *testing.T) { - v, command := config.Viperize(AddFlags) - command.ParseFlags([]string{"--memory.max-traces=100"}) - opts := Options{} - opts.InitFromViper(v) - - gotMaxTraces, err := strconv.Atoi(expvar.Get("memory.max-traces").String()) - assert.NoError(t, err) - - assert.Equal(t, 100, gotMaxTraces) -}