From 6614cb503c9aa99d0d739cba29882f17a47a3471 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 15 Mar 2024 12:37:11 -0600 Subject: [PATCH 01/21] Break out config --- cmd/mimir-continuous-test/main.go | 18 +----------------- pkg/continuoustest/config.go | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 pkg/continuoustest/config.go diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index fb1642c4df6..dff05b752fb 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -22,25 +22,9 @@ import ( "github.com/grafana/mimir/pkg/util/version" ) -type Config struct { - ServerMetricsPort int - LogLevel log.Level - Client continuoustest.ClientConfig - Manager continuoustest.ManagerConfig - WriteReadSeriesTest continuoustest.WriteReadSeriesTestConfig -} - -func (cfg *Config) RegisterFlags(f *flag.FlagSet) { - f.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") - cfg.LogLevel.RegisterFlags(f) - cfg.Client.RegisterFlags(f) - cfg.Manager.RegisterFlags(f) - cfg.WriteReadSeriesTest.RegisterFlags(f) -} - func main() { // Parse CLI arguments. - cfg := &Config{} + cfg := &continuoustest.Config{} cfg.RegisterFlags(flag.CommandLine) if err := flagext.ParseFlagsWithoutArguments(flag.CommandLine); err != nil { diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go new file mode 100644 index 00000000000..3d3cfdaa0f9 --- /dev/null +++ b/pkg/continuoustest/config.go @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +package continuoustest + +import ( + "flag" + + "github.com/grafana/dskit/log" +) + +type Config struct { + ServerMetricsPort int + LogLevel log.Level + Client ClientConfig + Manager ManagerConfig + WriteReadSeriesTest WriteReadSeriesTestConfig +} + +func (cfg *Config) RegisterFlags(f *flag.FlagSet) { + f.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") + cfg.LogLevel.RegisterFlags(f) + cfg.Client.RegisterFlags(f) + cfg.Manager.RegisterFlags(f) + cfg.WriteReadSeriesTest.RegisterFlags(f) +} From fd184d4828c62ed6416c6be6be5b97a3fd564914 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 15 Mar 2024 14:32:52 -0600 Subject: [PATCH 02/21] Convert continuousTestManager to service --- cmd/mimir-continuous-test/main.go | 2 +- pkg/continuoustest/manager.go | 5 ++++- pkg/continuoustest/manager_test.go | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index dff05b752fb..f575d6fe5a8 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -66,7 +66,7 @@ func main() { // Run continuous testing. m := continuoustest.NewManager(cfg.Manager, logger) m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) - if err := m.Run(context.Background()); err != nil { + if err := m.StartAsync(context.Background()); err != nil { level.Error(logger).Log("msg", "Failed to run continuous test", "err", err.Error()) util_log.Flush() os.Exit(1) diff --git a/pkg/continuoustest/manager.go b/pkg/continuoustest/manager.go index 7e71aed74d5..13b601942fb 100644 --- a/pkg/continuoustest/manager.go +++ b/pkg/continuoustest/manager.go @@ -9,6 +9,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/grafana/dskit/services" "golang.org/x/sync/errgroup" ) @@ -35,6 +36,8 @@ func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { } type Manager struct { + services.Service + cfg ManagerConfig logger log.Logger tests []Test @@ -51,7 +54,7 @@ func (m *Manager) AddTest(t Test) { m.tests = append(m.tests, t) } -func (m *Manager) Run(ctx context.Context) error { +func (m *Manager) StartAsync(ctx context.Context) error { // Initialize all tests. for _, t := range m.tests { if err := t.Init(ctx, time.Now()); err != nil { diff --git a/pkg/continuoustest/manager_test.go b/pkg/continuoustest/manager_test.go index e014ba5582a..7c2e9c93dfa 100644 --- a/pkg/continuoustest/manager_test.go +++ b/pkg/continuoustest/manager_test.go @@ -47,7 +47,7 @@ func TestManager_PeriodicRun(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.NoError(t, err) // Theoretically the test will run 6 times, but small timing differences may @@ -70,7 +70,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.NoError(t, err) require.Equal(t, dummyTest.runs, 1) @@ -91,7 +91,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.ErrorIs(t, err, dummyTest.err) require.Equal(t, dummyTest.runs, 1) From 4f20f223869f06019553ef985d8b8cff1fea8888 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 15 Mar 2024 14:33:16 -0600 Subject: [PATCH 03/21] Use continuousTest as a module --- pkg/mimir/modules.go | 53 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 2fb7d04bb25..f38613ff00d 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -10,12 +10,14 @@ import ( "flag" "fmt" "net/http" + "os" "strconv" "time" "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/grafana/dskit/dns" + "github.com/grafana/dskit/flagext" httpgrpc_server "github.com/grafana/dskit/httpgrpc/server" "github.com/grafana/dskit/kv" "github.com/grafana/dskit/kv/memberlist" @@ -24,22 +26,26 @@ import ( "github.com/grafana/dskit/runtimeconfig" "github.com/grafana/dskit/server" "github.com/grafana/dskit/services" + "github.com/grafana/dskit/tracing" "github.com/opentracing-contrib/go-stdlib/nethttp" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matchers/compat" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/common/config" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/rules" prom_storage "github.com/prometheus/prometheus/storage" prom_remote "github.com/prometheus/prometheus/storage/remote" + jaegercfg "github.com/uber/jaeger-client-go/config" "github.com/grafana/mimir/pkg/alertmanager" "github.com/grafana/mimir/pkg/alertmanager/alertstore" "github.com/grafana/mimir/pkg/api" "github.com/grafana/mimir/pkg/compactor" + "github.com/grafana/mimir/pkg/continuoustest" "github.com/grafana/mimir/pkg/distributor" "github.com/grafana/mimir/pkg/flusher" "github.com/grafana/mimir/pkg/frontend" @@ -57,6 +63,7 @@ import ( "github.com/grafana/mimir/pkg/usagestats" "github.com/grafana/mimir/pkg/util" "github.com/grafana/mimir/pkg/util/activitytracker" + "github.com/grafana/mimir/pkg/util/instrumentation" util_log "github.com/grafana/mimir/pkg/util/log" "github.com/grafana/mimir/pkg/util/validation" "github.com/grafana/mimir/pkg/util/validation/exporter" @@ -96,6 +103,7 @@ const ( Vault string = "vault" TenantFederation string = "tenant-federation" UsageStats string = "usage-stats" + ContinuousTest string = "continuous-test" All string = "all" // Write Read and Backend are the targets used when using the read-write deployment mode. @@ -1024,6 +1032,48 @@ func (t *Mimir) initUsageStats() (services.Service, error) { return t.UsageStatsReporter, nil } +func (t *Mimir) initContinuousTest() (services.Service, error) { + // Parse CLI arguments. + cfg := &continuoustest.Config{} + cfg.RegisterFlags(flag.CommandLine) + + if err := flagext.ParseFlagsWithoutArguments(flag.CommandLine); err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + } + + // Setting the environment variable JAEGER_AGENT_HOST enables tracing. + if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { + level.Error(util_log.Logger).Log("msg", "Failed to setup tracing", "err", err.Error()) + } else { + defer trace.Close() + } + + logger := util_log.Logger + + // Run the instrumentation server. + registry := prometheus.NewRegistry() + registry.MustRegister(version.NewCollector("mimir_continuous_test")) + registry.MustRegister(collectors.NewGoCollector()) + + i := instrumentation.NewMetricsServer(cfg.ServerMetricsPort, registry) + if err := i.Start(); err != nil { + level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) + util_log.Flush() + } + + // Init the client used to write/read to/from Mimir. + client, err := continuoustest.NewClient(cfg.Client, logger) + if err != nil { + level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) + util_log.Flush() + } + + m := continuoustest.NewManager(cfg.Manager, logger) + m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) + + return m, nil +} + func (t *Mimir) setupModuleManager() error { mm := modules.NewManager(util_log.Logger) @@ -1058,7 +1108,8 @@ func (t *Mimir) setupModuleManager() error { mm.RegisterModule(QueryScheduler, t.initQueryScheduler) mm.RegisterModule(TenantFederation, t.initTenantFederation, modules.UserInvisibleModule) mm.RegisterModule(UsageStats, t.initUsageStats, modules.UserInvisibleModule) - mm.RegisterModule(Vault, t.initVault, modules.UserInvisibleModule) + mm.RegisterModule(ContinuousTest, t.initContinuousTest, modules.UserInvisibleModule) + //mm.RegisterModule(Vault, t.initVault, modules.UserInvisibleModule) mm.RegisterModule(Write, nil) mm.RegisterModule(Read, nil) mm.RegisterModule(Backend, nil) From fbea9ff88144f9f73bd8b14efcff78e225238429 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 15 Mar 2024 16:14:54 -0600 Subject: [PATCH 04/21] Not private --- pkg/mimir/modules.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index f38613ff00d..35becdc7c05 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1108,8 +1108,8 @@ func (t *Mimir) setupModuleManager() error { mm.RegisterModule(QueryScheduler, t.initQueryScheduler) mm.RegisterModule(TenantFederation, t.initTenantFederation, modules.UserInvisibleModule) mm.RegisterModule(UsageStats, t.initUsageStats, modules.UserInvisibleModule) - mm.RegisterModule(ContinuousTest, t.initContinuousTest, modules.UserInvisibleModule) - //mm.RegisterModule(Vault, t.initVault, modules.UserInvisibleModule) + mm.RegisterModule(ContinuousTest, t.initContinuousTest) + mm.RegisterModule(Vault, t.initVault, modules.UserInvisibleModule) mm.RegisterModule(Write, nil) mm.RegisterModule(Read, nil) mm.RegisterModule(Backend, nil) From 5dfcfe267abb84c32dfedae653068901b88c673f Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Tue, 26 Mar 2024 13:11:42 -0600 Subject: [PATCH 05/21] WIP + broken --- cmd/mimir-continuous-test/main.go | 2 +- pkg/continuoustest/client.go | 24 +++++++-------- pkg/continuoustest/config.go | 11 +++---- pkg/continuoustest/manager.go | 9 ++---- pkg/continuoustest/manager_test.go | 6 ++-- pkg/continuoustest/write_read_series.go | 8 ++--- pkg/mimir/mimir.go | 3 ++ pkg/mimir/modules.go | 41 +++++++++++++++---------- 8 files changed, 55 insertions(+), 49 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index f575d6fe5a8..dff05b752fb 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -66,7 +66,7 @@ func main() { // Run continuous testing. m := continuoustest.NewManager(cfg.Manager, logger) m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) - if err := m.StartAsync(context.Background()); err != nil { + if err := m.Run(context.Background()); err != nil { level.Error(logger).Log("msg", "Failed to run continuous test", "err", err.Error()) util_log.Flush() os.Exit(1) diff --git a/pkg/continuoustest/client.go b/pkg/continuoustest/client.go index c9cd0140f00..9f56d4dccbf 100644 --- a/pkg/continuoustest/client.go +++ b/pkg/continuoustest/client.go @@ -40,18 +40,18 @@ type MimirClient interface { } type ClientConfig struct { - TenantID string - BasicAuthUser string - BasicAuthPassword string - BearerToken string - - WriteBaseEndpoint flagext.URLValue - WriteBatchSize int - WriteTimeout time.Duration - WriteProtocol string - - ReadBaseEndpoint flagext.URLValue - ReadTimeout time.Duration + TenantID string `yaml:"tenant_id"` + BasicAuthUser string `yaml:"basic_auth_user"` + BasicAuthPassword string `yaml:"basic_auth_password"` + BearerToken string `yaml:"bearer_token"` + + WriteBaseEndpoint flagext.URLValue `yaml:"write_endpoint"` + WriteBatchSize int `yaml:"write_batch_size"` + WriteTimeout time.Duration `yaml:"write_timeout"` + WriteProtocol string `yaml:"write_protocol"` + + ReadBaseEndpoint flagext.URLValue `yaml:"read_endpoint"` + ReadTimeout time.Duration `yaml:"read_timeout"` } func (cfg *ClientConfig) RegisterFlags(f *flag.FlagSet) { diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index 3d3cfdaa0f9..5e8c740f5f5 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -9,16 +9,15 @@ import ( ) type Config struct { - ServerMetricsPort int - LogLevel log.Level - Client ClientConfig - Manager ManagerConfig - WriteReadSeriesTest WriteReadSeriesTestConfig + ServerMetricsPort int `yaml:"server_metrics_port"` + LogLevel log.Level `yaml:"log_level"` + Client ClientConfig `yaml:"mimir_client"` + Manager ManagerConfig `yaml:"manager"` + WriteReadSeriesTest WriteReadSeriesTestConfig `yaml:"write_read_series_test"` } func (cfg *Config) RegisterFlags(f *flag.FlagSet) { f.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") - cfg.LogLevel.RegisterFlags(f) cfg.Client.RegisterFlags(f) cfg.Manager.RegisterFlags(f) cfg.WriteReadSeriesTest.RegisterFlags(f) diff --git a/pkg/continuoustest/manager.go b/pkg/continuoustest/manager.go index 13b601942fb..5b824bca211 100644 --- a/pkg/continuoustest/manager.go +++ b/pkg/continuoustest/manager.go @@ -9,7 +9,6 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" - "github.com/grafana/dskit/services" "golang.org/x/sync/errgroup" ) @@ -26,8 +25,8 @@ type Test interface { } type ManagerConfig struct { - SmokeTest bool - RunInterval time.Duration + SmokeTest bool `yaml:"smoke_test"` + RunInterval time.Duration `yaml:"run_interval"` } func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { @@ -36,8 +35,6 @@ func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { } type Manager struct { - services.Service - cfg ManagerConfig logger log.Logger tests []Test @@ -54,7 +51,7 @@ func (m *Manager) AddTest(t Test) { m.tests = append(m.tests, t) } -func (m *Manager) StartAsync(ctx context.Context) error { +func (m *Manager) Run(ctx context.Context) error { // Initialize all tests. for _, t := range m.tests { if err := t.Init(ctx, time.Now()); err != nil { diff --git a/pkg/continuoustest/manager_test.go b/pkg/continuoustest/manager_test.go index 7c2e9c93dfa..e014ba5582a 100644 --- a/pkg/continuoustest/manager_test.go +++ b/pkg/continuoustest/manager_test.go @@ -47,7 +47,7 @@ func TestManager_PeriodicRun(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.NoError(t, err) // Theoretically the test will run 6 times, but small timing differences may @@ -70,7 +70,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.NoError(t, err) require.Equal(t, dummyTest.runs, 1) @@ -91,7 +91,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.ErrorIs(t, err, dummyTest.err) require.Equal(t, dummyTest.runs, 1) diff --git a/pkg/continuoustest/write_read_series.go b/pkg/continuoustest/write_read_series.go index 4a230863c83..88d818dd77d 100644 --- a/pkg/continuoustest/write_read_series.go +++ b/pkg/continuoustest/write_read_series.go @@ -26,10 +26,10 @@ const ( ) type WriteReadSeriesTestConfig struct { - NumSeries int - MaxQueryAge time.Duration - WithFloats bool - WithHistograms bool + NumSeries int `yaml:"num_series"` + MaxQueryAge time.Duration `yaml:"max_query_age"` + WithFloats bool `yaml:"float_samples_enabled"` + WithHistograms bool `yaml:"histogram_samples_enabled"` } func (cfg *WriteReadSeriesTestConfig) RegisterFlags(f *flag.FlagSet) { diff --git a/pkg/mimir/mimir.go b/pkg/mimir/mimir.go index bb7bd6965b4..57c60e07ed4 100644 --- a/pkg/mimir/mimir.go +++ b/pkg/mimir/mimir.go @@ -48,6 +48,7 @@ import ( alertstorelocal "github.com/grafana/mimir/pkg/alertmanager/alertstore/local" "github.com/grafana/mimir/pkg/api" "github.com/grafana/mimir/pkg/compactor" + "github.com/grafana/mimir/pkg/continuoustest" "github.com/grafana/mimir/pkg/distributor" "github.com/grafana/mimir/pkg/flusher" "github.com/grafana/mimir/pkg/frontend" @@ -135,6 +136,7 @@ type Config struct { MemberlistKV memberlist.KVConfig `yaml:"memberlist"` QueryScheduler scheduler.Config `yaml:"query_scheduler"` UsageStats usagestats.Config `yaml:"usage_stats"` + ContinuousTest continuoustest.Config `yaml:"continuous_test"` OverridesExporter exporter.Config `yaml:"overrides_exporter"` Common CommonConfig `yaml:"common"` @@ -192,6 +194,7 @@ func (c *Config) RegisterFlags(f *flag.FlagSet, logger log.Logger) { c.ActivityTracker.RegisterFlags(f) c.QueryScheduler.RegisterFlags(f, logger) c.UsageStats.RegisterFlags(f) + c.ContinuousTest.RegisterFlags(f) c.OverridesExporter.RegisterFlags(f, logger) c.Common.RegisterFlags(f) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 35becdc7c05..0af31731085 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -10,14 +10,12 @@ import ( "flag" "fmt" "net/http" - "os" "strconv" "time" "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/grafana/dskit/dns" - "github.com/grafana/dskit/flagext" httpgrpc_server "github.com/grafana/dskit/httpgrpc/server" "github.com/grafana/dskit/kv" "github.com/grafana/dskit/kv/memberlist" @@ -429,6 +427,7 @@ func (t *Mimir) initRuntimeConfig() (services.Service, error) { t.Cfg.StoreGateway.ShardingRing.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) t.Cfg.QueryScheduler.ServiceDiscovery.SchedulerRing.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) t.Cfg.OverridesExporter.Ring.Common.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) + // TODO probably need to add for continuous-test return serv, err } @@ -1033,45 +1032,52 @@ func (t *Mimir) initUsageStats() (services.Service, error) { } func (t *Mimir) initContinuousTest() (services.Service, error) { - // Parse CLI arguments. - cfg := &continuoustest.Config{} - cfg.RegisterFlags(flag.CommandLine) - - if err := flagext.ParseFlagsWithoutArguments(flag.CommandLine); err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - } + //if t.Cfg.isModuleEnabled() + //cfg := &continuoustest.Config{} + //flagext.DefaultValues(&cfg) + logger := util_log.Logger + var err error + level.Info(logger).Log("initing continuous-test") // Setting the environment variable JAEGER_AGENT_HOST enables tracing. if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { - level.Error(util_log.Logger).Log("msg", "Failed to setup tracing", "err", err.Error()) + level.Error(logger).Log("msg", "Failed to setup tracing", "err", err.Error()) } else { defer trace.Close() } - - logger := util_log.Logger + level.Info(logger).Log("continuous-test setup tracing happened") // Run the instrumentation server. registry := prometheus.NewRegistry() registry.MustRegister(version.NewCollector("mimir_continuous_test")) registry.MustRegister(collectors.NewGoCollector()) + level.Info(logger).Log("prom registry created for ct") + + i := instrumentation.NewMetricsServer(t.Cfg.ContinuousTest.ServerMetricsPort, registry) - i := instrumentation.NewMetricsServer(cfg.ServerMetricsPort, registry) + level.Info(logger).Log("metrics server created for ct") if err := i.Start(); err != nil { level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) util_log.Flush() } // Init the client used to write/read to/from Mimir. - client, err := continuoustest.NewClient(cfg.Client, logger) + // TODO: building an external client and then going back in on a continuous test that's a module in Mimir feels.... ick. Clean this up + client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, logger) + level.Info(logger).Log("new client created for ct") if err != nil { level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) util_log.Flush() } - m := continuoustest.NewManager(cfg.Manager, logger) - m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) + m := continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, logger) + m.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, logger, registry)) + level.Info(logger).Log("new manager created for ct") - return m, nil + return services.NewIdleService(func(ctx context.Context) error { + level.Info(logger).Log("an idle service was created you just need to start it somehow") + return m.Run(context.Background()) + }, nil), nil } func (t *Mimir) setupModuleManager() error { @@ -1142,6 +1148,7 @@ func (t *Mimir) setupModuleManager() error { Compactor: {API, MemberlistKV, Overrides, Vault}, StoreGateway: {API, Overrides, MemberlistKV, Vault}, TenantFederation: {Queryable}, + ContinuousTest: {API, Queryable, Ingester, Distributor, StoreGateway, Compactor}, Write: {Distributor, Ingester}, Read: {QueryFrontend, Querier}, Backend: {QueryScheduler, Ruler, StoreGateway, Compactor, AlertManager, OverridesExporter}, From 0a75513de62489b53e406829554f0e295c65bcc5 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Tue, 26 Mar 2024 13:50:11 -0600 Subject: [PATCH 06/21] super advanced debugging with log statements --- pkg/mimir/modules.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 0af31731085..896a454a112 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1038,24 +1038,24 @@ func (t *Mimir) initContinuousTest() (services.Service, error) { logger := util_log.Logger var err error - level.Info(logger).Log("initing continuous-test") + level.Info(logger).Log("msg", "initing continuous-test") // Setting the environment variable JAEGER_AGENT_HOST enables tracing. if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { level.Error(logger).Log("msg", "Failed to setup tracing", "err", err.Error()) } else { defer trace.Close() } - level.Info(logger).Log("continuous-test setup tracing happened") + level.Info(logger).Log("msg", "continuous-test setup tracing happened") // Run the instrumentation server. registry := prometheus.NewRegistry() registry.MustRegister(version.NewCollector("mimir_continuous_test")) registry.MustRegister(collectors.NewGoCollector()) - level.Info(logger).Log("prom registry created for ct") + level.Info(logger).Log("msg", "prom registry created for ct") i := instrumentation.NewMetricsServer(t.Cfg.ContinuousTest.ServerMetricsPort, registry) - level.Info(logger).Log("metrics server created for ct") + level.Info(logger).Log("msg", "metrics server created for ct") if err := i.Start(); err != nil { level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) util_log.Flush() @@ -1064,7 +1064,7 @@ func (t *Mimir) initContinuousTest() (services.Service, error) { // Init the client used to write/read to/from Mimir. // TODO: building an external client and then going back in on a continuous test that's a module in Mimir feels.... ick. Clean this up client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, logger) - level.Info(logger).Log("new client created for ct") + level.Info(logger).Log("msg", "new client created for ct") if err != nil { level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) util_log.Flush() @@ -1072,10 +1072,10 @@ func (t *Mimir) initContinuousTest() (services.Service, error) { m := continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, logger) m.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, logger, registry)) - level.Info(logger).Log("new manager created for ct") + level.Info(logger).Log("msg", "new manager created for ct") return services.NewIdleService(func(ctx context.Context) error { - level.Info(logger).Log("an idle service was created you just need to start it somehow") + level.Info(logger).Log("msg", "an idle service was created you just need to start it somehow") return m.Run(context.Background()) }, nil), nil } From 222b5f0b02457de79939fb377af42716203365f6 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Wed, 27 Mar 2024 12:00:44 -0600 Subject: [PATCH 07/21] WIP --- cmd/mimir-continuous-test/main.go | 1 + .../config/mimir.yaml | 8 ++ pkg/mimir/mimir.go | 1 + pkg/mimir/modules.go | 81 +++++++++---------- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index dff05b752fb..6e895edc346 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -26,6 +26,7 @@ func main() { // Parse CLI arguments. cfg := &continuoustest.Config{} cfg.RegisterFlags(flag.CommandLine) + cfg.LogLevel.RegisterFlags(flag.CommandLine) if err := flagext.ParseFlagsWithoutArguments(flag.CommandLine); err != nil { fmt.Fprintln(os.Stderr, err.Error()) diff --git a/development/mimir-microservices-mode/config/mimir.yaml b/development/mimir-microservices-mode/config/mimir.yaml index 85f41aa7f95..72e37d3d6e2 100644 --- a/development/mimir-microservices-mode/config/mimir.yaml +++ b/development/mimir-microservices-mode/config/mimir.yaml @@ -173,3 +173,11 @@ limits: runtime_config: file: ./config/runtime.yaml + +continuous_test: + server_metrics_port: 9900 + mimir_client: + write_endpoint: "http://nginx:8080/" + read_endpoint: "http://nginx:8080/prometheus" + manager: + smoke_test: true diff --git a/pkg/mimir/mimir.go b/pkg/mimir/mimir.go index 57c60e07ed4..35dda67788e 100644 --- a/pkg/mimir/mimir.go +++ b/pkg/mimir/mimir.go @@ -723,6 +723,7 @@ type Mimir struct { ActivityTracker *activitytracker.ActivityTracker Vault *vault.Vault UsageStatsReporter *usagestats.Reporter + ContinuousTestManager *continuoustest.Manager BuildInfoHandler http.Handler } diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 896a454a112..e4f23cb05f2 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1032,51 +1032,50 @@ func (t *Mimir) initUsageStats() (services.Service, error) { } func (t *Mimir) initContinuousTest() (services.Service, error) { - //if t.Cfg.isModuleEnabled() - //cfg := &continuoustest.Config{} - //flagext.DefaultValues(&cfg) - logger := util_log.Logger - var err error - - level.Info(logger).Log("msg", "initing continuous-test") - // Setting the environment variable JAEGER_AGENT_HOST enables tracing. - if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { - level.Error(logger).Log("msg", "Failed to setup tracing", "err", err.Error()) - } else { - defer trace.Close() - } - level.Info(logger).Log("msg", "continuous-test setup tracing happened") - - // Run the instrumentation server. - registry := prometheus.NewRegistry() - registry.MustRegister(version.NewCollector("mimir_continuous_test")) - registry.MustRegister(collectors.NewGoCollector()) - level.Info(logger).Log("msg", "prom registry created for ct") + start := func(ctx context.Context) error { + logger := util_log.Logger + var err error + + level.Info(logger).Log("msg", "initing continuous-test") + // Setting the environment variable JAEGER_AGENT_HOST enables tracing. + if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { + level.Error(logger).Log("msg", "Failed to setup tracing", "err", err.Error()) + } else { + defer trace.Close() + } + level.Info(logger).Log("msg", "continuous-test setup tracing happened") - i := instrumentation.NewMetricsServer(t.Cfg.ContinuousTest.ServerMetricsPort, registry) + // Run the instrumentation server. + registry := prometheus.NewRegistry() + registry.MustRegister(version.NewCollector("mimir_continuous_test")) + registry.MustRegister(collectors.NewGoCollector()) + level.Info(logger).Log("msg", "prom registry created for ct") - level.Info(logger).Log("msg", "metrics server created for ct") - if err := i.Start(); err != nil { - level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) - util_log.Flush() - } + i := instrumentation.NewMetricsServer(t.Cfg.ContinuousTest.ServerMetricsPort, registry) - // Init the client used to write/read to/from Mimir. - // TODO: building an external client and then going back in on a continuous test that's a module in Mimir feels.... ick. Clean this up - client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, logger) - level.Info(logger).Log("msg", "new client created for ct") - if err != nil { - level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) - util_log.Flush() - } + level.Info(logger).Log("msg", "metrics server created for ct") + if err := i.Start(); err != nil { + level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) + util_log.Flush() + } - m := continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, logger) - m.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, logger, registry)) - level.Info(logger).Log("msg", "new manager created for ct") + // Init the client used to write/read to/from Mimir. + // TODO: building an external client and then going back in on a continuous test that's a module in Mimir feels.... ick. Clean this up + client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, logger) + level.Info(logger).Log("msg", "new client created for ct") + if err != nil { + level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) + util_log.Flush() + } - return services.NewIdleService(func(ctx context.Context) error { - level.Info(logger).Log("msg", "an idle service was created you just need to start it somehow") - return m.Run(context.Background()) + m := continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, logger) + m.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, logger, registry)) + t.ContinuousTestManager = m + level.Info(logger).Log("msg", "new manager created for ct") + return err + } + return services.NewBasicService(start, func(ctx context.Context) error { + return t.ContinuousTestManager.Run(context.Background()) }, nil), nil } @@ -1148,7 +1147,7 @@ func (t *Mimir) setupModuleManager() error { Compactor: {API, MemberlistKV, Overrides, Vault}, StoreGateway: {API, Overrides, MemberlistKV, Vault}, TenantFederation: {Queryable}, - ContinuousTest: {API, Queryable, Ingester, Distributor, StoreGateway, Compactor}, + ContinuousTest: {API}, Write: {Distributor, Ingester}, Read: {QueryFrontend, Querier}, Backend: {QueryScheduler, Ruler, StoreGateway, Compactor, AlertManager, OverridesExporter}, From fe999f9ba2e29f0cdae3c2a1aae5cc96c89703c5 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Thu, 28 Mar 2024 14:06:11 -0600 Subject: [PATCH 08/21] Clean up reinstantiating unnecessary parts of the module --- cmd/mimir-continuous-test/main.go | 1 + pkg/continuoustest/config.go | 1 - pkg/mimir/modules.go | 49 +++++-------------------------- 3 files changed, 8 insertions(+), 43 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index 6e895edc346..8df2dd529bb 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -25,6 +25,7 @@ import ( func main() { // Parse CLI arguments. cfg := &continuoustest.Config{} + flag.CommandLine.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") cfg.RegisterFlags(flag.CommandLine) cfg.LogLevel.RegisterFlags(flag.CommandLine) diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index 5e8c740f5f5..bb6d290445e 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -17,7 +17,6 @@ type Config struct { } func (cfg *Config) RegisterFlags(f *flag.FlagSet) { - f.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") cfg.Client.RegisterFlags(f) cfg.Manager.RegisterFlags(f) cfg.WriteReadSeriesTest.RegisterFlags(f) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index e4f23cb05f2..b71ea778908 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -24,20 +24,17 @@ import ( "github.com/grafana/dskit/runtimeconfig" "github.com/grafana/dskit/server" "github.com/grafana/dskit/services" - "github.com/grafana/dskit/tracing" "github.com/opentracing-contrib/go-stdlib/nethttp" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matchers/compat" "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/common/config" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/rules" prom_storage "github.com/prometheus/prometheus/storage" prom_remote "github.com/prometheus/prometheus/storage/remote" - jaegercfg "github.com/uber/jaeger-client-go/config" "github.com/grafana/mimir/pkg/alertmanager" "github.com/grafana/mimir/pkg/alertmanager/alertstore" @@ -61,7 +58,6 @@ import ( "github.com/grafana/mimir/pkg/usagestats" "github.com/grafana/mimir/pkg/util" "github.com/grafana/mimir/pkg/util/activitytracker" - "github.com/grafana/mimir/pkg/util/instrumentation" util_log "github.com/grafana/mimir/pkg/util/log" "github.com/grafana/mimir/pkg/util/validation" "github.com/grafana/mimir/pkg/util/validation/exporter" @@ -1033,49 +1029,18 @@ func (t *Mimir) initUsageStats() (services.Service, error) { func (t *Mimir) initContinuousTest() (services.Service, error) { start := func(ctx context.Context) error { - logger := util_log.Logger - var err error - - level.Info(logger).Log("msg", "initing continuous-test") - // Setting the environment variable JAEGER_AGENT_HOST enables tracing. - if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { - level.Error(logger).Log("msg", "Failed to setup tracing", "err", err.Error()) - } else { - defer trace.Close() - } - level.Info(logger).Log("msg", "continuous-test setup tracing happened") - - // Run the instrumentation server. - registry := prometheus.NewRegistry() - registry.MustRegister(version.NewCollector("mimir_continuous_test")) - registry.MustRegister(collectors.NewGoCollector()) - level.Info(logger).Log("msg", "prom registry created for ct") - - i := instrumentation.NewMetricsServer(t.Cfg.ContinuousTest.ServerMetricsPort, registry) - - level.Info(logger).Log("msg", "metrics server created for ct") - if err := i.Start(); err != nil { - level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) - util_log.Flush() - } - - // Init the client used to write/read to/from Mimir. - // TODO: building an external client and then going back in on a continuous test that's a module in Mimir feels.... ick. Clean this up - client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, logger) - level.Info(logger).Log("msg", "new client created for ct") + client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, util_log.Logger) if err != nil { - level.Error(logger).Log("msg", "Failed to initialize client", "err", err.Error()) - util_log.Flush() + return errors.Wrap(err, "Failed to initialize continuous-test client") } - m := continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, logger) - m.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, logger, registry)) - t.ContinuousTestManager = m - level.Info(logger).Log("msg", "new manager created for ct") - return err + t.ContinuousTestManager = continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, util_log.Logger) + t.ContinuousTestManager.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, util_log.Logger, t.Registerer)) + return nil } + return services.NewBasicService(start, func(ctx context.Context) error { - return t.ContinuousTestManager.Run(context.Background()) + return t.ContinuousTestManager.Run(ctx) }, nil), nil } From 4219c9dc39c852683e1e1678f9cf2dbb342989db Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Thu, 28 Mar 2024 15:12:14 -0600 Subject: [PATCH 09/21] Unnecessary since it's only used in the independent continuous-test and not the module --- pkg/continuoustest/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index bb6d290445e..71c0693fe59 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -9,8 +9,8 @@ import ( ) type Config struct { - ServerMetricsPort int `yaml:"server_metrics_port"` - LogLevel log.Level `yaml:"log_level"` + ServerMetricsPort int + LogLevel log.Level Client ClientConfig `yaml:"mimir_client"` Manager ManagerConfig `yaml:"manager"` WriteReadSeriesTest WriteReadSeriesTestConfig `yaml:"write_read_series_test"` From 8263e32b3cf6c892ef12256d1b6590bca90d2827 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Thu, 28 Mar 2024 16:27:12 -0600 Subject: [PATCH 10/21] Pulling out config file abilities because it didn't exist before so it's unnecessary --- pkg/continuoustest/client.go | 24 ++++++++++++------------ pkg/continuoustest/config.go | 10 +++++----- pkg/continuoustest/manager.go | 4 ++-- pkg/continuoustest/write_read_series.go | 8 ++++---- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/pkg/continuoustest/client.go b/pkg/continuoustest/client.go index 9f56d4dccbf..c9cd0140f00 100644 --- a/pkg/continuoustest/client.go +++ b/pkg/continuoustest/client.go @@ -40,18 +40,18 @@ type MimirClient interface { } type ClientConfig struct { - TenantID string `yaml:"tenant_id"` - BasicAuthUser string `yaml:"basic_auth_user"` - BasicAuthPassword string `yaml:"basic_auth_password"` - BearerToken string `yaml:"bearer_token"` - - WriteBaseEndpoint flagext.URLValue `yaml:"write_endpoint"` - WriteBatchSize int `yaml:"write_batch_size"` - WriteTimeout time.Duration `yaml:"write_timeout"` - WriteProtocol string `yaml:"write_protocol"` - - ReadBaseEndpoint flagext.URLValue `yaml:"read_endpoint"` - ReadTimeout time.Duration `yaml:"read_timeout"` + TenantID string + BasicAuthUser string + BasicAuthPassword string + BearerToken string + + WriteBaseEndpoint flagext.URLValue + WriteBatchSize int + WriteTimeout time.Duration + WriteProtocol string + + ReadBaseEndpoint flagext.URLValue + ReadTimeout time.Duration } func (cfg *ClientConfig) RegisterFlags(f *flag.FlagSet) { diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index 71c0693fe59..05b4c1972cb 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -9,11 +9,11 @@ import ( ) type Config struct { - ServerMetricsPort int - LogLevel log.Level - Client ClientConfig `yaml:"mimir_client"` - Manager ManagerConfig `yaml:"manager"` - WriteReadSeriesTest WriteReadSeriesTestConfig `yaml:"write_read_series_test"` + ServerMetricsPort int + LogLevel log.Level + Client ClientConfig + Manager ManagerConfig + WriteReadSeriesTest WriteReadSeriesTestConfig } func (cfg *Config) RegisterFlags(f *flag.FlagSet) { diff --git a/pkg/continuoustest/manager.go b/pkg/continuoustest/manager.go index 5b824bca211..7e71aed74d5 100644 --- a/pkg/continuoustest/manager.go +++ b/pkg/continuoustest/manager.go @@ -25,8 +25,8 @@ type Test interface { } type ManagerConfig struct { - SmokeTest bool `yaml:"smoke_test"` - RunInterval time.Duration `yaml:"run_interval"` + SmokeTest bool + RunInterval time.Duration } func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { diff --git a/pkg/continuoustest/write_read_series.go b/pkg/continuoustest/write_read_series.go index 88d818dd77d..4a230863c83 100644 --- a/pkg/continuoustest/write_read_series.go +++ b/pkg/continuoustest/write_read_series.go @@ -26,10 +26,10 @@ const ( ) type WriteReadSeriesTestConfig struct { - NumSeries int `yaml:"num_series"` - MaxQueryAge time.Duration `yaml:"max_query_age"` - WithFloats bool `yaml:"float_samples_enabled"` - WithHistograms bool `yaml:"histogram_samples_enabled"` + NumSeries int + MaxQueryAge time.Duration + WithFloats bool + WithHistograms bool } func (cfg *WriteReadSeriesTestConfig) RegisterFlags(f *flag.FlagSet) { From 0f582e27a8fe9318d1843565743318853c5d0775 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Thu, 28 Mar 2024 16:48:54 -0600 Subject: [PATCH 11/21] continuous-test does not need to be in development docker-compose --- development/mimir-microservices-mode/config/mimir.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/development/mimir-microservices-mode/config/mimir.yaml b/development/mimir-microservices-mode/config/mimir.yaml index 72e37d3d6e2..85f41aa7f95 100644 --- a/development/mimir-microservices-mode/config/mimir.yaml +++ b/development/mimir-microservices-mode/config/mimir.yaml @@ -173,11 +173,3 @@ limits: runtime_config: file: ./config/runtime.yaml - -continuous_test: - server_metrics_port: 9900 - mimir_client: - write_endpoint: "http://nginx:8080/" - read_endpoint: "http://nginx:8080/prometheus" - manager: - smoke_test: true From 5fe76b178d205eaaf2291a42cbad0a2e5fdbcc4b Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 11:24:09 -0600 Subject: [PATCH 12/21] make reference-help --- cmd/mimir/config-descriptor.json | 217 +++++++++++++++++++++++++++++++ cmd/mimir/help-all.txt.tmpl | 32 +++++ cmd/mimir/help.txt.tmpl | 32 +++++ 3 files changed, 281 insertions(+) diff --git a/cmd/mimir/config-descriptor.json b/cmd/mimir/config-descriptor.json index 5e1b4cab641..d81be164fe4 100644 --- a/cmd/mimir/config-descriptor.json +++ b/cmd/mimir/config-descriptor.json @@ -15486,6 +15486,223 @@ "fieldValue": null, "fieldDefaultValue": null }, + { + "kind": "block", + "name": "continuous_test", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "servermetricsport", + "required": false, + "desc": "", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldType": "int" + }, + { + "kind": "block", + "name": "loglevel", + "required": false, + "desc": "", + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "client", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "tenantid", + "required": false, + "desc": "The tenant ID to use to write and read metrics in tests. (mutually exclusive with basic-auth or bearer-token flags)", + "fieldValue": null, + "fieldDefaultValue": "anonymous", + "fieldFlag": "tests.tenant-id", + "fieldType": "string" + }, + { + "kind": "field", + "name": "basicauthuser", + "required": false, + "desc": "The username to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags)", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "tests.basic-auth-user", + "fieldType": "string" + }, + { + "kind": "field", + "name": "basicauthpassword", + "required": false, + "desc": "The password to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags)", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "tests.basic-auth-password", + "fieldType": "string" + }, + { + "kind": "field", + "name": "bearertoken", + "required": false, + "desc": "The bearer token to use for HTTP bearer authentication. (mutually exclusive with tenant-id flag or basic-auth flags)", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "tests.bearer-token", + "fieldType": "string" + }, + { + "kind": "field", + "name": "writebaseendpoint", + "required": false, + "desc": "The base endpoint on the write path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/push for the remote write API endpoint, so the configured URL must not include it.", + "fieldValue": null, + "fieldDefaultValue": {}, + "fieldFlag": "tests.write-endpoint", + "fieldType": "url" + }, + { + "kind": "field", + "name": "writebatchsize", + "required": false, + "desc": "The maximum number of series to write in a single request.", + "fieldValue": null, + "fieldDefaultValue": 1000, + "fieldFlag": "tests.write-batch-size", + "fieldType": "int" + }, + { + "kind": "field", + "name": "writetimeout", + "required": false, + "desc": "The timeout for a single write request.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "tests.write-timeout", + "fieldType": "duration" + }, + { + "kind": "field", + "name": "writeprotocol", + "required": false, + "desc": "The protocol to use to write series data. Supported values are: prometheus, otlp-http", + "fieldValue": null, + "fieldDefaultValue": "prometheus", + "fieldFlag": "tests.write-protocol", + "fieldType": "string" + }, + { + "kind": "field", + "name": "readbaseendpoint", + "required": false, + "desc": "The base endpoint on the read path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/query_range for range query API, so the configured URL must not include it.", + "fieldValue": null, + "fieldDefaultValue": {}, + "fieldFlag": "tests.read-endpoint", + "fieldType": "url" + }, + { + "kind": "field", + "name": "readtimeout", + "required": false, + "desc": "The timeout for a single read request.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "tests.read-timeout", + "fieldType": "duration" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "manager", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "smoketest", + "required": false, + "desc": "Run a smoke test, i.e. run all tests once and exit.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "tests.smoke-test", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "runinterval", + "required": false, + "desc": "How frequently tests should run.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "tests.run-interval", + "fieldType": "duration" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "writereadseriestest", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "numseries", + "required": false, + "desc": "Number of series used for the test.", + "fieldValue": null, + "fieldDefaultValue": 10000, + "fieldFlag": "tests.write-read-series-test.num-series", + "fieldType": "int" + }, + { + "kind": "field", + "name": "maxqueryage", + "required": false, + "desc": "How back in the past metrics can be queried at most.", + "fieldValue": null, + "fieldDefaultValue": 604800000000000, + "fieldFlag": "tests.write-read-series-test.max-query-age", + "fieldType": "duration" + }, + { + "kind": "field", + "name": "withfloats", + "required": false, + "desc": "Set to true to use float samples", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "tests.write-read-series-test.float-samples-enabled", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "withhistograms", + "required": false, + "desc": "Set to true to use native histogram samples", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "tests.write-read-series-test.histogram-samples-enabled", + "fieldType": "boolean" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, { "kind": "block", "name": "overrides_exporter", diff --git a/cmd/mimir/help-all.txt.tmpl b/cmd/mimir/help-all.txt.tmpl index 9a6b3a1312f..20d960c47a5 100644 --- a/cmd/mimir/help-all.txt.tmpl +++ b/cmd/mimir/help-all.txt.tmpl @@ -2755,6 +2755,38 @@ Usage of ./cmd/mimir/mimir: [experimental] The number of workers used for each tenant federated query. This setting limits the maximum number of per-tenant queries executed at a time for a tenant federated query. (default 16) -tenant-federation.max-tenants int [experimental] The max number of tenant IDs that may be supplied for a federated query if enabled. 0 to disable the limit. + -tests.basic-auth-password string + The password to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags) + -tests.basic-auth-user string + The username to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags) + -tests.bearer-token string + The bearer token to use for HTTP bearer authentication. (mutually exclusive with tenant-id flag or basic-auth flags) + -tests.read-endpoint string + The base endpoint on the read path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/query_range for range query API, so the configured URL must not include it. + -tests.read-timeout duration + The timeout for a single read request. (default 1m0s) + -tests.run-interval duration + How frequently tests should run. (default 5m0s) + -tests.smoke-test + Run a smoke test, i.e. run all tests once and exit. + -tests.tenant-id string + The tenant ID to use to write and read metrics in tests. (mutually exclusive with basic-auth or bearer-token flags) (default "anonymous") + -tests.write-batch-size int + The maximum number of series to write in a single request. (default 1000) + -tests.write-endpoint string + The base endpoint on the write path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/push for the remote write API endpoint, so the configured URL must not include it. + -tests.write-protocol string + The protocol to use to write series data. Supported values are: prometheus, otlp-http (default "prometheus") + -tests.write-read-series-test.float-samples-enabled + Set to true to use float samples (default true) + -tests.write-read-series-test.histogram-samples-enabled + Set to true to use native histogram samples + -tests.write-read-series-test.max-query-age duration + How back in the past metrics can be queried at most. (default 168h0m0s) + -tests.write-read-series-test.num-series int + Number of series used for the test. (default 10000) + -tests.write-timeout duration + The timeout for a single write request. (default 5s) -timeseries-unmarshal-caching-optimization-enabled [experimental] Enables optimized marshaling of timeseries. (default true) -usage-stats.enabled diff --git a/cmd/mimir/help.txt.tmpl b/cmd/mimir/help.txt.tmpl index 93c78089569..7dd666432df 100644 --- a/cmd/mimir/help.txt.tmpl +++ b/cmd/mimir/help.txt.tmpl @@ -719,6 +719,38 @@ Usage of ./cmd/mimir/mimir: Comma-separated list of components to include in the instantiated process. The default value 'all' includes all components that are required to form a functional Grafana Mimir instance in single-binary mode. Use the '-modules' command line flag to get a list of available components, and to see which components are included with 'all'. (default all) -tenant-federation.enabled If enabled on all services, queries can be federated across multiple tenants. The tenant IDs involved need to be specified separated by a '|' character in the 'X-Scope-OrgID' header. + -tests.basic-auth-password string + The password to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags) + -tests.basic-auth-user string + The username to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags) + -tests.bearer-token string + The bearer token to use for HTTP bearer authentication. (mutually exclusive with tenant-id flag or basic-auth flags) + -tests.read-endpoint string + The base endpoint on the read path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/query_range for range query API, so the configured URL must not include it. + -tests.read-timeout duration + The timeout for a single read request. (default 1m0s) + -tests.run-interval duration + How frequently tests should run. (default 5m0s) + -tests.smoke-test + Run a smoke test, i.e. run all tests once and exit. + -tests.tenant-id string + The tenant ID to use to write and read metrics in tests. (mutually exclusive with basic-auth or bearer-token flags) (default "anonymous") + -tests.write-batch-size int + The maximum number of series to write in a single request. (default 1000) + -tests.write-endpoint string + The base endpoint on the write path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/push for the remote write API endpoint, so the configured URL must not include it. + -tests.write-protocol string + The protocol to use to write series data. Supported values are: prometheus, otlp-http (default "prometheus") + -tests.write-read-series-test.float-samples-enabled + Set to true to use float samples (default true) + -tests.write-read-series-test.histogram-samples-enabled + Set to true to use native histogram samples + -tests.write-read-series-test.max-query-age duration + How back in the past metrics can be queried at most. (default 168h0m0s) + -tests.write-read-series-test.num-series int + Number of series used for the test. (default 10000) + -tests.write-timeout duration + The timeout for a single write request. (default 5s) -usage-stats.enabled Enable anonymous usage reporting. (default true) -usage-stats.installation-mode string From 50b16c3f4347f7c9dffda5cd77e071eca993089b Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 12:48:03 -0600 Subject: [PATCH 13/21] make reference-help --- cmd/mimir/config-descriptor.json | 209 ------------------------------- pkg/continuoustest/config.go | 10 +- 2 files changed, 5 insertions(+), 214 deletions(-) diff --git a/cmd/mimir/config-descriptor.json b/cmd/mimir/config-descriptor.json index d81be164fe4..111807214fe 100644 --- a/cmd/mimir/config-descriptor.json +++ b/cmd/mimir/config-descriptor.json @@ -15491,215 +15491,6 @@ "name": "continuous_test", "required": false, "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "servermetricsport", - "required": false, - "desc": "", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldType": "int" - }, - { - "kind": "block", - "name": "loglevel", - "required": false, - "desc": "", - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "client", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "tenantid", - "required": false, - "desc": "The tenant ID to use to write and read metrics in tests. (mutually exclusive with basic-auth or bearer-token flags)", - "fieldValue": null, - "fieldDefaultValue": "anonymous", - "fieldFlag": "tests.tenant-id", - "fieldType": "string" - }, - { - "kind": "field", - "name": "basicauthuser", - "required": false, - "desc": "The username to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags)", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "tests.basic-auth-user", - "fieldType": "string" - }, - { - "kind": "field", - "name": "basicauthpassword", - "required": false, - "desc": "The password to use for HTTP bearer authentication. (mutually exclusive with tenant-id or bearer-token flags)", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "tests.basic-auth-password", - "fieldType": "string" - }, - { - "kind": "field", - "name": "bearertoken", - "required": false, - "desc": "The bearer token to use for HTTP bearer authentication. (mutually exclusive with tenant-id flag or basic-auth flags)", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "tests.bearer-token", - "fieldType": "string" - }, - { - "kind": "field", - "name": "writebaseendpoint", - "required": false, - "desc": "The base endpoint on the write path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/push for the remote write API endpoint, so the configured URL must not include it.", - "fieldValue": null, - "fieldDefaultValue": {}, - "fieldFlag": "tests.write-endpoint", - "fieldType": "url" - }, - { - "kind": "field", - "name": "writebatchsize", - "required": false, - "desc": "The maximum number of series to write in a single request.", - "fieldValue": null, - "fieldDefaultValue": 1000, - "fieldFlag": "tests.write-batch-size", - "fieldType": "int" - }, - { - "kind": "field", - "name": "writetimeout", - "required": false, - "desc": "The timeout for a single write request.", - "fieldValue": null, - "fieldDefaultValue": 5000000000, - "fieldFlag": "tests.write-timeout", - "fieldType": "duration" - }, - { - "kind": "field", - "name": "writeprotocol", - "required": false, - "desc": "The protocol to use to write series data. Supported values are: prometheus, otlp-http", - "fieldValue": null, - "fieldDefaultValue": "prometheus", - "fieldFlag": "tests.write-protocol", - "fieldType": "string" - }, - { - "kind": "field", - "name": "readbaseendpoint", - "required": false, - "desc": "The base endpoint on the read path. The URL should have no trailing slash. The specific API path is appended by the tool to the URL, for example /api/v1/query_range for range query API, so the configured URL must not include it.", - "fieldValue": null, - "fieldDefaultValue": {}, - "fieldFlag": "tests.read-endpoint", - "fieldType": "url" - }, - { - "kind": "field", - "name": "readtimeout", - "required": false, - "desc": "The timeout for a single read request.", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "tests.read-timeout", - "fieldType": "duration" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "manager", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "smoketest", - "required": false, - "desc": "Run a smoke test, i.e. run all tests once and exit.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "tests.smoke-test", - "fieldType": "boolean" - }, - { - "kind": "field", - "name": "runinterval", - "required": false, - "desc": "How frequently tests should run.", - "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "tests.run-interval", - "fieldType": "duration" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "writereadseriestest", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "numseries", - "required": false, - "desc": "Number of series used for the test.", - "fieldValue": null, - "fieldDefaultValue": 10000, - "fieldFlag": "tests.write-read-series-test.num-series", - "fieldType": "int" - }, - { - "kind": "field", - "name": "maxqueryage", - "required": false, - "desc": "How back in the past metrics can be queried at most.", - "fieldValue": null, - "fieldDefaultValue": 604800000000000, - "fieldFlag": "tests.write-read-series-test.max-query-age", - "fieldType": "duration" - }, - { - "kind": "field", - "name": "withfloats", - "required": false, - "desc": "Set to true to use float samples", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "tests.write-read-series-test.float-samples-enabled", - "fieldType": "boolean" - }, - { - "kind": "field", - "name": "withhistograms", - "required": false, - "desc": "Set to true to use native histogram samples", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "tests.write-read-series-test.histogram-samples-enabled", - "fieldType": "boolean" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], "fieldValue": null, "fieldDefaultValue": null }, diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index 05b4c1972cb..0621462449d 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -9,11 +9,11 @@ import ( ) type Config struct { - ServerMetricsPort int - LogLevel log.Level - Client ClientConfig - Manager ManagerConfig - WriteReadSeriesTest WriteReadSeriesTestConfig + ServerMetricsPort int `yaml:"-"` + LogLevel log.Level `yaml:"-"` + Client ClientConfig `yaml:"-"` + Manager ManagerConfig `yaml:"-"` + WriteReadSeriesTest WriteReadSeriesTestConfig `yaml:"-"` } func (cfg *Config) RegisterFlags(f *flag.FlagSet) { From 654c6d528e6cd5264ca5c7f7eab72dd267b162f5 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 13:03:45 -0600 Subject: [PATCH 14/21] Get rid of any config file abilities for continuous-test: unnecessary --- pkg/mimir/mimir.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/mimir/mimir.go b/pkg/mimir/mimir.go index 35dda67788e..6252f031183 100644 --- a/pkg/mimir/mimir.go +++ b/pkg/mimir/mimir.go @@ -136,7 +136,7 @@ type Config struct { MemberlistKV memberlist.KVConfig `yaml:"memberlist"` QueryScheduler scheduler.Config `yaml:"query_scheduler"` UsageStats usagestats.Config `yaml:"usage_stats"` - ContinuousTest continuoustest.Config `yaml:"continuous_test"` + ContinuousTest continuoustest.Config `yaml:"-"` OverridesExporter exporter.Config `yaml:"overrides_exporter"` Common CommonConfig `yaml:"common"` From 574a0457234011c328790c85c36826b39a9d6d0c Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 13:04:30 -0600 Subject: [PATCH 15/21] make reference-help --- cmd/mimir/config-descriptor.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cmd/mimir/config-descriptor.json b/cmd/mimir/config-descriptor.json index 111807214fe..5e1b4cab641 100644 --- a/cmd/mimir/config-descriptor.json +++ b/cmd/mimir/config-descriptor.json @@ -15486,14 +15486,6 @@ "fieldValue": null, "fieldDefaultValue": null }, - { - "kind": "block", - "name": "continuous_test", - "required": false, - "desc": "", - "fieldValue": null, - "fieldDefaultValue": null - }, { "kind": "block", "name": "overrides_exporter", From 095a1372b7c1db024a796d9aaaa400830bd1a451 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 14:51:00 -0600 Subject: [PATCH 16/21] CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a592709e295..f11549f84c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Grafana Mimir +* [FEATURE] Continuous-test: now runable as a module with `mimir -target=continuous-test`. #7747 * [ENHANCEMENT] Store-gateway: merge series from different blocks concurrently. #7456 * [BUGFIX] Rules: improve error handling when querier is local to the ruler. #7567 * [BUGFIX] Querier, store-gateway: Protect against panics raised during snappy encoding. #7520 From 30470f3f9c170aeb4d7233579e478512f0600075 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 16:00:36 -0600 Subject: [PATCH 17/21] start function redundant in an init --- pkg/mimir/modules.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 8bc6384714a..c35cb8e563c 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1038,18 +1038,15 @@ func (t *Mimir) initUsageStats() (services.Service, error) { } func (t *Mimir) initContinuousTest() (services.Service, error) { - start := func(ctx context.Context) error { - client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, util_log.Logger) - if err != nil { - return errors.Wrap(err, "Failed to initialize continuous-test client") - } - - t.ContinuousTestManager = continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, util_log.Logger) - t.ContinuousTestManager.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, util_log.Logger, t.Registerer)) - return nil + client, err := continuoustest.NewClient(t.Cfg.ContinuousTest.Client, util_log.Logger) + if err != nil { + return nil, errors.Wrap(err, "Failed to initialize continuous-test client") } - return services.NewBasicService(start, func(ctx context.Context) error { + t.ContinuousTestManager = continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, util_log.Logger) + t.ContinuousTestManager.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, util_log.Logger, t.Registerer)) + + return services.NewBasicService(nil, func(ctx context.Context) error { return t.ContinuousTestManager.Run(ctx) }, nil), nil } From 6c43b47ac00933ef58833fb46985ab91ea5e51d9 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 16:02:33 -0600 Subject: [PATCH 18/21] Remove TODO comment --- pkg/mimir/modules.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index c35cb8e563c..5985688589e 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -424,7 +424,6 @@ func (t *Mimir) initRuntimeConfig() (services.Service, error) { t.Cfg.StoreGateway.ShardingRing.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) t.Cfg.QueryScheduler.ServiceDiscovery.SchedulerRing.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) t.Cfg.OverridesExporter.Ring.Common.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.RuntimeConfig) - // TODO probably need to add for continuous-test return serv, err } From b4a650fe31a743aa72a3a80431aaebea94087a4f Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 16:08:37 -0600 Subject: [PATCH 19/21] Remove config parts only applicable to main binary backward compatibility --- cmd/mimir-continuous-test/main.go | 12 ++++++++---- pkg/continuoustest/config.go | 4 ---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index 8df2dd529bb..4cf5a7d26c5 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -25,16 +25,20 @@ import ( func main() { // Parse CLI arguments. cfg := &continuoustest.Config{} - flag.CommandLine.IntVar(&cfg.ServerMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") + var ( + serverMetricsPort int + logLevel log.Level + ) + flag.CommandLine.IntVar(&serverMetricsPort, "server.metrics-port", 9900, "The port where metrics are exposed.") cfg.RegisterFlags(flag.CommandLine) - cfg.LogLevel.RegisterFlags(flag.CommandLine) + logLevel.RegisterFlags(flag.CommandLine) if err := flagext.ParseFlagsWithoutArguments(flag.CommandLine); err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } - util_log.InitLogger(log.LogfmtFormat, cfg.LogLevel, false, util_log.RateLimitedLoggerCfg{}) + util_log.InitLogger(log.LogfmtFormat, logLevel, false, util_log.RateLimitedLoggerCfg{}) // Setting the environment variable JAEGER_AGENT_HOST enables tracing. if trace, err := tracing.NewFromEnv("mimir-continuous-test", jaegercfg.MaxTagValueLength(16e3)); err != nil { @@ -50,7 +54,7 @@ func main() { registry.MustRegister(version.NewCollector("mimir_continuous_test")) registry.MustRegister(collectors.NewGoCollector()) - i := instrumentation.NewMetricsServer(cfg.ServerMetricsPort, registry) + i := instrumentation.NewMetricsServer(serverMetricsPort, registry) if err := i.Start(); err != nil { level.Error(logger).Log("msg", "Unable to start instrumentation server", "err", err.Error()) util_log.Flush() diff --git a/pkg/continuoustest/config.go b/pkg/continuoustest/config.go index 0621462449d..8232cc99695 100644 --- a/pkg/continuoustest/config.go +++ b/pkg/continuoustest/config.go @@ -4,13 +4,9 @@ package continuoustest import ( "flag" - - "github.com/grafana/dskit/log" ) type Config struct { - ServerMetricsPort int `yaml:"-"` - LogLevel log.Level `yaml:"-"` Client ClientConfig `yaml:"-"` Manager ManagerConfig `yaml:"-"` WriteReadSeriesTest WriteReadSeriesTestConfig `yaml:"-"` From 578d5273a1cc4c791444e74a67aad9dda4abcb17 Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 16:17:59 -0600 Subject: [PATCH 20/21] Change to use other module approach of Manager as services.Service --- cmd/mimir-continuous-test/main.go | 2 +- pkg/continuoustest/manager.go | 5 ++++- pkg/continuoustest/manager_test.go | 6 +++--- pkg/mimir/modules.go | 4 +--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index 4cf5a7d26c5..75bb43faafc 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -72,7 +72,7 @@ func main() { // Run continuous testing. m := continuoustest.NewManager(cfg.Manager, logger) m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) - if err := m.Run(context.Background()); err != nil { + if err := m.StartAsync(context.Background()); err != nil { level.Error(logger).Log("msg", "Failed to run continuous test", "err", err.Error()) util_log.Flush() os.Exit(1) diff --git a/pkg/continuoustest/manager.go b/pkg/continuoustest/manager.go index 7e71aed74d5..13b601942fb 100644 --- a/pkg/continuoustest/manager.go +++ b/pkg/continuoustest/manager.go @@ -9,6 +9,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/grafana/dskit/services" "golang.org/x/sync/errgroup" ) @@ -35,6 +36,8 @@ func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { } type Manager struct { + services.Service + cfg ManagerConfig logger log.Logger tests []Test @@ -51,7 +54,7 @@ func (m *Manager) AddTest(t Test) { m.tests = append(m.tests, t) } -func (m *Manager) Run(ctx context.Context) error { +func (m *Manager) StartAsync(ctx context.Context) error { // Initialize all tests. for _, t := range m.tests { if err := t.Init(ctx, time.Now()); err != nil { diff --git a/pkg/continuoustest/manager_test.go b/pkg/continuoustest/manager_test.go index e014ba5582a..7c2e9c93dfa 100644 --- a/pkg/continuoustest/manager_test.go +++ b/pkg/continuoustest/manager_test.go @@ -47,7 +47,7 @@ func TestManager_PeriodicRun(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.NoError(t, err) // Theoretically the test will run 6 times, but small timing differences may @@ -70,7 +70,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.NoError(t, err) require.Equal(t, dummyTest.runs, 1) @@ -91,7 +91,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.Run(ctx) + err := manager.StartAsync(ctx) require.ErrorIs(t, err, dummyTest.err) require.Equal(t, dummyTest.runs, 1) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 5985688589e..41606dbaaef 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1045,9 +1045,7 @@ func (t *Mimir) initContinuousTest() (services.Service, error) { t.ContinuousTestManager = continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, util_log.Logger) t.ContinuousTestManager.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, util_log.Logger, t.Registerer)) - return services.NewBasicService(nil, func(ctx context.Context) error { - return t.ContinuousTestManager.Run(ctx) - }, nil), nil + return t.ContinuousTestManager, nil } func (t *Mimir) setupModuleManager() error { From 900c0d846a38896476a5c96b4569a15acab2056f Mon Sep 17 00:00:00 2001 From: Johanna Ratliff Date: Fri, 29 Mar 2024 16:48:05 -0600 Subject: [PATCH 21/21] Revert "Change to use other module approach of Manager as services.Service" This reverts commit 578d5273a1cc4c791444e74a67aad9dda4abcb17. --- cmd/mimir-continuous-test/main.go | 2 +- pkg/continuoustest/manager.go | 5 +---- pkg/continuoustest/manager_test.go | 6 +++--- pkg/mimir/modules.go | 4 +++- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/cmd/mimir-continuous-test/main.go b/cmd/mimir-continuous-test/main.go index 75bb43faafc..4cf5a7d26c5 100644 --- a/cmd/mimir-continuous-test/main.go +++ b/cmd/mimir-continuous-test/main.go @@ -72,7 +72,7 @@ func main() { // Run continuous testing. m := continuoustest.NewManager(cfg.Manager, logger) m.AddTest(continuoustest.NewWriteReadSeriesTest(cfg.WriteReadSeriesTest, client, logger, registry)) - if err := m.StartAsync(context.Background()); err != nil { + if err := m.Run(context.Background()); err != nil { level.Error(logger).Log("msg", "Failed to run continuous test", "err", err.Error()) util_log.Flush() os.Exit(1) diff --git a/pkg/continuoustest/manager.go b/pkg/continuoustest/manager.go index 13b601942fb..7e71aed74d5 100644 --- a/pkg/continuoustest/manager.go +++ b/pkg/continuoustest/manager.go @@ -9,7 +9,6 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" - "github.com/grafana/dskit/services" "golang.org/x/sync/errgroup" ) @@ -36,8 +35,6 @@ func (cfg *ManagerConfig) RegisterFlags(f *flag.FlagSet) { } type Manager struct { - services.Service - cfg ManagerConfig logger log.Logger tests []Test @@ -54,7 +51,7 @@ func (m *Manager) AddTest(t Test) { m.tests = append(m.tests, t) } -func (m *Manager) StartAsync(ctx context.Context) error { +func (m *Manager) Run(ctx context.Context) error { // Initialize all tests. for _, t := range m.tests { if err := t.Init(ctx, time.Now()); err != nil { diff --git a/pkg/continuoustest/manager_test.go b/pkg/continuoustest/manager_test.go index 7c2e9c93dfa..e014ba5582a 100644 --- a/pkg/continuoustest/manager_test.go +++ b/pkg/continuoustest/manager_test.go @@ -47,7 +47,7 @@ func TestManager_PeriodicRun(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.NoError(t, err) // Theoretically the test will run 6 times, but small timing differences may @@ -70,7 +70,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.NoError(t, err) require.Equal(t, dummyTest.runs, 1) @@ -91,7 +91,7 @@ func TestManager_SmokeTest(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*50) defer cancel() - err := manager.StartAsync(ctx) + err := manager.Run(ctx) require.ErrorIs(t, err, dummyTest.err) require.Equal(t, dummyTest.runs, 1) diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 41606dbaaef..5985688589e 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -1045,7 +1045,9 @@ func (t *Mimir) initContinuousTest() (services.Service, error) { t.ContinuousTestManager = continuoustest.NewManager(t.Cfg.ContinuousTest.Manager, util_log.Logger) t.ContinuousTestManager.AddTest(continuoustest.NewWriteReadSeriesTest(t.Cfg.ContinuousTest.WriteReadSeriesTest, client, util_log.Logger, t.Registerer)) - return t.ContinuousTestManager, nil + return services.NewBasicService(nil, func(ctx context.Context) error { + return t.ContinuousTestManager.Run(ctx) + }, nil), nil } func (t *Mimir) setupModuleManager() error {