chore: Restructure `indexgateway` component package (#12630)

This PR moves code for the index gateway server and client components into the `pkg/indexgateway` directory, so it that the index gateway has its own top-level package like other components, such as ingester, distributor, querier, ...

Signed-off-by: Christian Haudum <christian.haudum@gmail.com>
pull/12567/head^2
Christian Haudum 2 years ago committed by GitHub
parent be1a77255c
commit 2f24b670cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 52
      pkg/indexgateway/client.go
  2. 12
      pkg/indexgateway/client_pool.go
  3. 38
      pkg/indexgateway/client_test.go
  4. 0
      pkg/indexgateway/config.go
  5. 0
      pkg/indexgateway/gateway.go
  6. 0
      pkg/indexgateway/gateway_test.go
  7. 0
      pkg/indexgateway/grpc.go
  8. 0
      pkg/indexgateway/metrics.go
  9. 0
      pkg/indexgateway/shufflesharding.go
  10. 2
      pkg/loki/loki.go
  11. 2
      pkg/loki/modules.go
  12. 2
      pkg/loki/modules_test.go
  13. 16
      pkg/querier/querier.go
  14. 5
      pkg/storage/factory.go
  15. 5
      pkg/storage/store.go
  16. 14
      pkg/storage/stores/shipper/indexshipper/shipper.go
  17. 2
      pkg/util/limiter/combined_limits.go
  18. 2
      tools/doc-generator/parse/root_blocks.go

@ -1,4 +1,4 @@
package gatewayclient
package indexgateway
import (
"context"
@ -30,7 +30,6 @@ import (
"github.com/grafana/loki/v3/pkg/logproto"
"github.com/grafana/loki/v3/pkg/logql/syntax"
"github.com/grafana/loki/v3/pkg/storage/stores/series/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/tsdb/sharding"
"github.com/grafana/loki/v3/pkg/util/constants"
"github.com/grafana/loki/v3/pkg/util/discovery"
@ -42,12 +41,12 @@ const (
maxConcurrentGrpcCalls = 10
)
// IndexGatewayClientConfig configures the Index Gateway client used to
// communicate with the Index Gateway server.
type IndexGatewayClientConfig struct {
// ClientConfig configures the Index Gateway client used to communicate with
// the Index Gateway server.
type ClientConfig struct {
// Mode sets in which mode the client will operate. It is actually defined at the
// index_gateway YAML section and reused here.
Mode indexgateway.Mode `yaml:"-"`
Mode Mode `yaml:"-"`
// PoolConfig defines the behavior of the gRPC connection pool used to communicate
// with the Index Gateway.
@ -87,39 +86,32 @@ type IndexGatewayClientConfig struct {
// RegisterFlagsWithPrefix register client-specific flags with the given prefix.
//
// Flags that are used by both, client and server, are defined in the indexgateway package.
func (i *IndexGatewayClientConfig) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) {
func (i *ClientConfig) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) {
i.GRPCClientConfig.RegisterFlagsWithPrefix(prefix+".grpc", f)
f.StringVar(&i.Address, prefix+".server-address", "", "Hostname or IP of the Index Gateway gRPC server running in simple mode. Can also be prefixed with dns+, dnssrv+, or dnssrvnoa+ to resolve a DNS A record with multiple IP's, a DNS SRV record with a followup A record lookup, or a DNS SRV record without a followup A record lookup, respectively.")
f.BoolVar(&i.LogGatewayRequests, prefix+".log-gateway-requests", false, "Whether requests sent to the gateway should be logged or not.")
}
func (i *IndexGatewayClientConfig) RegisterFlags(f *flag.FlagSet) {
func (i *ClientConfig) RegisterFlags(f *flag.FlagSet) {
i.RegisterFlagsWithPrefix("index-gateway-client", f)
}
type GatewayClient struct {
logger log.Logger
cfg IndexGatewayClientConfig
logger log.Logger
cfg ClientConfig
storeGatewayClientRequestDuration *prometheus.HistogramVec
dnsProvider *discovery.DNS
pool *client.Pool
ring ring.ReadRing
limits indexgateway.Limits
done chan struct{}
dnsProvider *discovery.DNS
pool *client.Pool
ring ring.ReadRing
limits Limits
done chan struct{}
}
// NewGatewayClient instantiates a new client used to communicate with an Index Gateway instance.
//
// If it is configured to be in ring mode, a pool of GRPC connections to all Index Gateway instances is created using a ring.
// Otherwise, it creates a GRPC connection pool to as many addresses as can be resolved from the given address.
func NewGatewayClient(cfg IndexGatewayClientConfig, r prometheus.Registerer, limits indexgateway.Limits, logger log.Logger, metricsNamespace string) (*GatewayClient, error) {
func NewGatewayClient(cfg ClientConfig, r prometheus.Registerer, limits Limits, logger log.Logger, metricsNamespace string) (*GatewayClient, error) {
latency := prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: constants.Loki,
Name: "index_gateway_request_duration_seconds",
@ -151,7 +143,7 @@ func NewGatewayClient(cfg IndexGatewayClientConfig, r prometheus.Registerer, lim
return nil, errors.Wrap(err, "index gateway grpc dial option")
}
factory := func(addr string) (client.PoolClient, error) {
igPool, err := NewIndexGatewayGRPCPool(addr, dialOpts)
igPool, err := NewClientPool(addr, dialOpts)
if err != nil {
return nil, errors.Wrap(err, "new index gateway grpc pool")
}
@ -165,7 +157,7 @@ func NewGatewayClient(cfg IndexGatewayClientConfig, r prometheus.Registerer, lim
sgClient.cfg.PoolConfig.ClientCleanupPeriod = 5 * time.Second
sgClient.cfg.PoolConfig.HealthCheckIngesters = true
if sgClient.cfg.Mode == indexgateway.RingMode {
if sgClient.cfg.Mode == RingMode {
sgClient.pool = clientpool.NewPool("index-gateway", sgClient.cfg.PoolConfig, sgClient.ring, client.PoolAddrFunc(factory), logger, metricsNamespace)
} else {
// Note we don't use clientpool.NewPool because we want to provide our own discovery function
@ -380,7 +372,7 @@ func (s *GatewayClient) getShardsFromStatsFallback(
return nil, errors.Wrap(err, "index gateway client get tenant ID")
}
p, err := indexgateway.ExtractShardRequestMatchersAndAST(in.Query)
p, err := ExtractShardRequestMatchersAndAST(in.Query)
if err != nil {
return nil, errors.Wrap(err, "failure while falling back to stats for shard calculation")
@ -531,9 +523,9 @@ func (s *GatewayClient) getServerAddresses(tenantID string) ([]string, error) {
// The GRPC pool we use only does discovery calls when cleaning up already existing connections,
// so the list of addresses should always be provided from the external provider (ring or DNS)
// and not from the RegisteredAddresses method as this list is only populated after a call to GetClientFor
if s.cfg.Mode == indexgateway.RingMode {
r := indexgateway.GetShuffleShardingSubring(s.ring, tenantID, s.limits)
rs, err := r.GetReplicationSetForOperation(indexgateway.IndexesRead)
if s.cfg.Mode == RingMode {
r := GetShuffleShardingSubring(s.ring, tenantID, s.limits)
rs, err := r.GetReplicationSetForOperation(IndexesRead)
if err != nil {
return nil, errors.Wrap(err, "index gateway get ring")
}
@ -587,7 +579,7 @@ func (b *grpcIter) Value() []byte {
return b.Rows[b.i].Value
}
func instrumentation(cfg IndexGatewayClientConfig, clientRequestDuration *prometheus.HistogramVec) ([]grpc.UnaryClientInterceptor, []grpc.StreamClientInterceptor) {
func instrumentation(cfg ClientConfig, clientRequestDuration *prometheus.HistogramVec) ([]grpc.UnaryClientInterceptor, []grpc.StreamClientInterceptor) {
var unaryInterceptors []grpc.UnaryClientInterceptor
unaryInterceptors = append(unaryInterceptors, cfg.GRPCUnaryClientInterceptors...)
unaryInterceptors = append(unaryInterceptors, otgrpc.OpenTracingClientInterceptor(opentracing.GlobalTracer()))

@ -1,4 +1,4 @@
package gatewayclient
package indexgateway
import (
"io"
@ -10,25 +10,25 @@ import (
"github.com/grafana/loki/v3/pkg/logproto"
)
// IndexGatewayGRPCPool represents a pool of gRPC connections to different index gateway instances.
// ClientPool represents a pool of gRPC connections to different index gateway instances.
//
// Only used when Index Gateway is configured to run in ring mode.
type IndexGatewayGRPCPool struct {
type ClientPool struct {
grpc_health_v1.HealthClient
logproto.IndexGatewayClient
io.Closer
}
// NewIndexGatewayGRPCPool instantiates a new pool of IndexGateway GRPC connections.
// NewClientPool instantiates a new pool of IndexGateway GRPC connections.
//
// Internally, it also instantiates a protobuf index gateway client and a health client.
func NewIndexGatewayGRPCPool(address string, opts []grpc.DialOption) (*IndexGatewayGRPCPool, error) {
func NewClientPool(address string, opts []grpc.DialOption) (*ClientPool, error) {
conn, err := grpc.Dial(address, opts...)
if err != nil {
return nil, errors.Wrap(err, "shipper new grpc pool dial")
}
return &IndexGatewayGRPCPool{
return &ClientPool{
Closer: conn,
HealthClient: grpc_health_v1.NewHealthClient(conn),
IndexGatewayClient: logproto.NewIndexGatewayClient(conn),

@ -1,4 +1,4 @@
package gatewayclient
package indexgateway
import (
"context"
@ -23,27 +23,15 @@ import (
"github.com/grafana/loki/v3/pkg/distributor/clientpool"
"github.com/grafana/loki/v3/pkg/logproto"
"github.com/grafana/loki/v3/pkg/storage/stores/series/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/util/constants"
"github.com/grafana/loki/v3/pkg/validation"
)
const (
// query prefixes
tableNamePrefix = "table-name"
hashValuePrefix = "hash-value"
rangeValuePrefixPrefix = "range-value-prefix"
rangeValueStartPrefix = "range-value-start"
valueEqualPrefix = "value-equal"
// response prefixes
rangeValuePrefix = "range-value"
valuePrefix = "value"
// the number of index entries for benchmarking will be divided amongst numTables
//benchMarkNumEntries = 1000000
//numTables = 50
)
// const (
// the number of index entries for benchmarking will be divided amongst numTables
// benchMarkNumEntries = 1000000
// numTables = 50
// )
type mockIndexGatewayServer struct {
logproto.IndexGatewayServer
@ -187,9 +175,9 @@ func TestGatewayClient_RingMode(t *testing.T) {
o, err := validation.NewOverrides(validation.Limits{IndexGatewayShardSize: s}, nil)
require.NoError(t, err)
cfg := IndexGatewayClientConfig{}
cfg := ClientConfig{}
flagext.DefaultValues(&cfg)
cfg.Mode = indexgateway.RingMode
cfg.Mode = RingMode
cfg.Ring = igwRing
c, err := NewGatewayClient(cfg, nil, o, logger, constants.Loki)
@ -218,9 +206,9 @@ func TestGatewayClient_RingMode(t *testing.T) {
o, err := validation.NewOverrides(validation.Limits{IndexGatewayShardSize: s}, tl)
require.NoError(t, err)
cfg := IndexGatewayClientConfig{}
cfg := ClientConfig{}
flagext.DefaultValues(&cfg)
cfg.Mode = indexgateway.RingMode
cfg.Mode = RingMode
cfg.Ring = igwRing
c, err := NewGatewayClient(cfg, nil, o, logger, constants.Loki)
@ -247,8 +235,8 @@ func TestGatewayClient(t *testing.T) {
cleanup, storeAddress := createTestGrpcServer(t)
t.Cleanup(cleanup)
var cfg IndexGatewayClientConfig
cfg.Mode = indexgateway.SimpleMode
var cfg ClientConfig
cfg.Mode = SimpleMode
flagext.DefaultValues(&cfg)
cfg.Address = storeAddress
cfg.PoolConfig = clientpool.PoolConfig{ClientCleanupPeriod: 500 * time.Millisecond}
@ -437,7 +425,7 @@ func TestDoubleRegistration(t *testing.T) {
r := prometheus.NewRegistry()
o, _ := validation.NewOverrides(validation.Limits{}, nil)
clientCfg := IndexGatewayClientConfig{
clientCfg := ClientConfig{
Address: "my-store-address:1234",
}

@ -37,6 +37,7 @@ import (
compactorclient "github.com/grafana/loki/v3/pkg/compactor/client"
"github.com/grafana/loki/v3/pkg/compactor/deletion"
"github.com/grafana/loki/v3/pkg/distributor"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/ingester"
ingester_client "github.com/grafana/loki/v3/pkg/ingester/client"
"github.com/grafana/loki/v3/pkg/loghttp/push"
@ -58,7 +59,6 @@ import (
"github.com/grafana/loki/v3/pkg/storage/config"
"github.com/grafana/loki/v3/pkg/storage/stores/series/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/bloomshipper"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/tracing"
"github.com/grafana/loki/v3/pkg/util"
"github.com/grafana/loki/v3/pkg/util/constants"

@ -45,6 +45,7 @@ import (
"github.com/grafana/loki/v3/pkg/compactor/deletion"
"github.com/grafana/loki/v3/pkg/compactor/generationnumber"
"github.com/grafana/loki/v3/pkg/distributor"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/ingester"
"github.com/grafana/loki/v3/pkg/logproto"
"github.com/grafana/loki/v3/pkg/logql"
@ -71,7 +72,6 @@ import (
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/boltdb"
boltdbcompactor "github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/boltdb/compactor"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/tsdb"
"github.com/grafana/loki/v3/pkg/util/constants"
"github.com/grafana/loki/v3/pkg/util/httpreq"

@ -13,13 +13,13 @@ import (
"github.com/prometheus/client_golang/prometheus"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/storage"
"github.com/grafana/loki/v3/pkg/storage/chunk/client/local"
"github.com/grafana/loki/v3/pkg/storage/config"
bloomshipperconfig "github.com/grafana/loki/v3/pkg/storage/stores/shipper/bloomshipper/config"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/boltdb"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/types"
)

@ -13,34 +13,32 @@ import (
"github.com/axiomhq/hyperloglog"
"github.com/dustin/go-humanize"
"github.com/go-kit/log"
"github.com/opentracing/opentracing-go"
"golang.org/x/exp/slices"
logql_log "github.com/grafana/loki/v3/pkg/logql/log"
"github.com/grafana/loki/v3/pkg/logqlmodel"
"github.com/grafana/loki/v3/pkg/storage/stores/index"
"github.com/grafana/loki/v3/pkg/storage/stores/index/seriesvolume"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/go-kit/log/level"
"github.com/grafana/dskit/httpgrpc"
"github.com/grafana/dskit/tenant"
"github.com/opentracing/opentracing-go"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/common/model"
"github.com/prometheus/prometheus/model/labels"
"golang.org/x/exp/slices"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc/health/grpc_health_v1"
"github.com/grafana/loki/v3/pkg/compactor/deletion"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/iter"
"github.com/grafana/loki/v3/pkg/loghttp"
"github.com/grafana/loki/v3/pkg/logproto"
"github.com/grafana/loki/v3/pkg/logql"
logql_log "github.com/grafana/loki/v3/pkg/logql/log"
"github.com/grafana/loki/v3/pkg/logql/syntax"
"github.com/grafana/loki/v3/pkg/logqlmodel"
querier_limits "github.com/grafana/loki/v3/pkg/querier/limits"
"github.com/grafana/loki/v3/pkg/querier/plan"
"github.com/grafana/loki/v3/pkg/storage"
"github.com/grafana/loki/v3/pkg/storage/stores/index"
"github.com/grafana/loki/v3/pkg/storage/stores/index/seriesvolume"
"github.com/grafana/loki/v3/pkg/storage/stores/index/stats"
listutil "github.com/grafana/loki/v3/pkg/util"
"github.com/grafana/loki/v3/pkg/util/spanlogger"

@ -14,6 +14,7 @@ import (
"github.com/grafana/dskit/flagext"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/chunk/cache"
"github.com/grafana/loki/v3/pkg/storage/chunk/client"
"github.com/grafana/loki/v3/pkg/storage/chunk/client/alibaba"
@ -36,8 +37,6 @@ import (
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/boltdb"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/downloads"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/gatewayclient"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/types"
"github.com/grafana/loki/v3/pkg/util"
"github.com/grafana/loki/v3/pkg/util/constants"
@ -381,7 +380,7 @@ func NewIndexClient(periodCfg config.PeriodConfig, tableRange config.TableRange,
return indexGatewayClient, nil
}
gateway, err := gatewayclient.NewGatewayClient(cfg.BoltDBShipperConfig.IndexGatewayClientConfig, registerer, limits, logger, constants.Loki)
gateway, err := indexgateway.NewGatewayClient(cfg.BoltDBShipperConfig.IndexGatewayClientConfig, registerer, limits, logger, constants.Loki)
if err != nil {
return nil, err
}

@ -21,6 +21,7 @@ import (
"github.com/grafana/dskit/tenant"
"github.com/grafana/loki/v3/pkg/analytics"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/iter"
"github.com/grafana/loki/v3/pkg/logproto"
"github.com/grafana/loki/v3/pkg/logql"
@ -37,8 +38,6 @@ import (
"github.com/grafana/loki/v3/pkg/storage/stores/series"
series_index "github.com/grafana/loki/v3/pkg/storage/stores/series/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/gatewayclient"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/tsdb"
"github.com/grafana/loki/v3/pkg/util"
"github.com/grafana/loki/v3/pkg/util/deletion"
@ -280,7 +279,7 @@ func (s *LokiStore) storeForPeriod(p config.PeriodConfig, tableRange config.Tabl
if p.IndexType == types.TSDBType {
if shouldUseIndexGatewayClient(s.cfg.TSDBShipperConfig) {
// inject the index-gateway client into the index store
gw, err := gatewayclient.NewGatewayClient(s.cfg.TSDBShipperConfig.IndexGatewayClientConfig, indexClientReg, s.limits, indexClientLogger, s.metricsNamespace)
gw, err := indexgateway.NewGatewayClient(s.cfg.TSDBShipperConfig.IndexGatewayClientConfig, indexClientReg, s.limits, indexClientLogger, s.metricsNamespace)
if err != nil {
return nil, nil, nil, err
}

@ -14,11 +14,11 @@ import (
"github.com/prometheus/client_golang/prometheus"
"golang.org/x/sync/errgroup"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/storage/chunk/client"
"github.com/grafana/loki/v3/pkg/storage/chunk/client/util"
"github.com/grafana/loki/v3/pkg/storage/config"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/downloads"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/gatewayclient"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/storage"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/uploads"
@ -58,12 +58,12 @@ type IndexShipper interface {
}
type Config struct {
ActiveIndexDirectory string `yaml:"active_index_directory"`
CacheLocation string `yaml:"cache_location"`
CacheTTL time.Duration `yaml:"cache_ttl"`
ResyncInterval time.Duration `yaml:"resync_interval"`
QueryReadyNumDays int `yaml:"query_ready_num_days"`
IndexGatewayClientConfig gatewayclient.IndexGatewayClientConfig `yaml:"index_gateway_client"`
ActiveIndexDirectory string `yaml:"active_index_directory"`
CacheLocation string `yaml:"cache_location"`
CacheTTL time.Duration `yaml:"cache_ttl"`
ResyncInterval time.Duration `yaml:"resync_interval"`
QueryReadyNumDays int `yaml:"query_ready_num_days"`
IndexGatewayClientConfig indexgateway.ClientConfig `yaml:"index_gateway_client"`
IngesterName string
Mode Mode

@ -5,13 +5,13 @@ import (
"github.com/grafana/loki/v3/pkg/bloomgateway"
"github.com/grafana/loki/v3/pkg/compactor"
"github.com/grafana/loki/v3/pkg/distributor"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/ingester"
querier_limits "github.com/grafana/loki/v3/pkg/querier/limits"
queryrange_limits "github.com/grafana/loki/v3/pkg/querier/queryrange/limits"
"github.com/grafana/loki/v3/pkg/ruler"
scheduler_limits "github.com/grafana/loki/v3/pkg/scheduler/limits"
"github.com/grafana/loki/v3/pkg/storage"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
)
type CombinedLimits interface {

@ -18,6 +18,7 @@ import (
"github.com/grafana/loki/v3/pkg/bloomgateway"
"github.com/grafana/loki/v3/pkg/compactor"
"github.com/grafana/loki/v3/pkg/distributor"
"github.com/grafana/loki/v3/pkg/indexgateway"
"github.com/grafana/loki/v3/pkg/ingester"
ingester_client "github.com/grafana/loki/v3/pkg/ingester/client"
"github.com/grafana/loki/v3/pkg/loghttp/push"
@ -41,7 +42,6 @@ import (
"github.com/grafana/loki/v3/pkg/storage/chunk/client/openstack"
storage_config "github.com/grafana/loki/v3/pkg/storage/config"
"github.com/grafana/loki/v3/pkg/storage/stores/series/index"
"github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/indexgateway"
"github.com/grafana/loki/v3/pkg/tracing"
"github.com/grafana/loki/v3/pkg/validation"
)

Loading…
Cancel
Save