|
|
|
@ -7,6 +7,7 @@ import ( |
|
|
|
|
|
|
|
|
|
"github.com/grafana/dskit/flagext" |
|
|
|
|
"github.com/prometheus/common/model" |
|
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
|
|
|
|
|
|
"github.com/prometheus/client_golang/prometheus" |
|
|
|
@ -16,6 +17,8 @@ import ( |
|
|
|
|
"github.com/grafana/loki/pkg/storage/config" |
|
|
|
|
"github.com/grafana/loki/pkg/storage/stores/indexshipper" |
|
|
|
|
"github.com/grafana/loki/pkg/storage/stores/shipper" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/loki/pkg/storage/stores/shipper/indexgateway" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func Test_calculateMaxLookBack(t *testing.T) { |
|
|
|
@ -144,6 +147,81 @@ func TestMultiKVSetup(t *testing.T) { |
|
|
|
|
t.Run(target, func(t *testing.T) { |
|
|
|
|
prepareGlobalMetricsRegistry(t) |
|
|
|
|
|
|
|
|
|
cfg := minimalWorkingConfig(t, dir, target) |
|
|
|
|
cfg.RuntimeConfig.LoadPath = filepath.Join(dir, "config.yaml") |
|
|
|
|
c, err := New(cfg) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
_, err = c.ModuleManager.InitModuleServices(cfg.Target...) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
defer c.Server.Stop() |
|
|
|
|
|
|
|
|
|
checkFn(t, c.Cfg) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestIndexGatewayRingMode_when_TargetIsRead(t *testing.T) { |
|
|
|
|
dir := t.TempDir() |
|
|
|
|
|
|
|
|
|
t.Run("IndexGateway always set to ring mode when running as part of read target", func(t *testing.T) { |
|
|
|
|
cfg := minimalWorkingConfig(t, dir, Read) |
|
|
|
|
c, err := New(cfg) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
services, err := c.ModuleManager.InitModuleServices(Read) |
|
|
|
|
defer func() { |
|
|
|
|
for _, service := range services { |
|
|
|
|
service.StopAsync() |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
assert.Equal(t, c.Cfg.IndexGateway.Mode, indexgateway.RingMode) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("When IndexGateway is running independent of Read target", func(t *testing.T) { |
|
|
|
|
t.Run("IndexGateway respects configured simple mode", func(t *testing.T) { |
|
|
|
|
cfg := minimalWorkingConfig(t, dir, IndexGatewayRing) |
|
|
|
|
cfg.IndexGateway.Mode = indexgateway.SimpleMode |
|
|
|
|
c, err := New(cfg) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
services, err := c.ModuleManager.InitModuleServices(IndexGateway) |
|
|
|
|
defer func() { |
|
|
|
|
for _, service := range services { |
|
|
|
|
service.StopAsync() |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
assert.Equal(t, c.Cfg.IndexGateway.Mode, indexgateway.SimpleMode) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("IndexGateway respects configured ring mode", func(t *testing.T) { |
|
|
|
|
cfg := minimalWorkingConfig(t, dir, IndexGatewayRing) |
|
|
|
|
cfg.IndexGateway.Mode = indexgateway.RingMode |
|
|
|
|
c, err := New(cfg) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
services, err := c.ModuleManager.InitModuleServices(IndexGateway) |
|
|
|
|
defer func() { |
|
|
|
|
for _, service := range services { |
|
|
|
|
service.StopAsync() |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
assert.Equal(t, c.Cfg.IndexGateway.Mode, indexgateway.RingMode) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func minimalWorkingConfig(t *testing.T, dir, target string) Config { |
|
|
|
|
prepareGlobalMetricsRegistry(t) |
|
|
|
|
|
|
|
|
|
cfg := Config{} |
|
|
|
|
cfg.SchemaConfig = config.SchemaConfig{ |
|
|
|
|
Configs: []config.PeriodConfig{ |
|
|
|
@ -164,9 +242,6 @@ func TestMultiKVSetup(t *testing.T) { |
|
|
|
|
cfg.Server.GRPCListenPort = 0 |
|
|
|
|
cfg.Target = []string{target} |
|
|
|
|
|
|
|
|
|
// Must be set, otherwise MultiKV config provider will not be set.
|
|
|
|
|
cfg.RuntimeConfig.LoadPath = filepath.Join(dir, "config.yaml") |
|
|
|
|
|
|
|
|
|
// This would be overwritten by the default values setting.
|
|
|
|
|
cfg.StorageConfig = storage.Config{ |
|
|
|
|
FSConfig: local.FSConfig{Directory: dir}, |
|
|
|
@ -181,15 +256,5 @@ func TestMultiKVSetup(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
cfg.Ruler.Config.StoreConfig.Type = config.StorageTypeLocal |
|
|
|
|
cfg.Ruler.Config.StoreConfig.Local.Directory = dir |
|
|
|
|
|
|
|
|
|
c, err := New(cfg) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
_, err = c.ModuleManager.InitModuleServices(cfg.Target...) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
defer c.Server.Stop() |
|
|
|
|
|
|
|
|
|
checkFn(t, c.Cfg) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
return cfg |
|
|
|
|
} |
|
|
|
|