Documentation
¶
Index ¶
- Constants
- Variables
- func ConfigFromWatcher(ctx context.Context, updates chan<- []HashringConfig, cw *ConfigWatcher) error
- func NewEmptyRequestLimitsConfig() *requestLimitsConfig
- func NewHeadSeriesLimit(w WriteLimitsConfig, registerer prometheus.Registerer, logger log.Logger) *headSeriesLimit
- func NewNopSeriesLimit() *nopSeriesLimit
- func ShuffleShardExpectedInstancesPerZone(shardSize, numZones int) int
- func ShuffleShardSeed(identifier, zone string) int64
- type Appendable
- type CapNProtoHandler
- type CapNProtoServer
- type CapNProtoWriter
- type CapNProtoWriterOptions
- type ConfigWatcher
- type DefaultLimitsConfig
- type Endpoint
- type GlobalLimitsConfig
- type Handler
- type Hashring
- type HashringAlgorithm
- type HashringConfig
- type Limiter
- type MultiTSDB
- func (t *MultiTSDB) Close()
- func (t *MultiTSDB) Flush() error
- func (t *MultiTSDB) Open() error
- func (t *MultiTSDB) Prune(ctx context.Context) error
- func (t *MultiTSDB) RemoveLockFilesIfAny() error
- func (t *MultiTSDB) SetHashringConfig(cfg []HashringConfig) error
- func (t *MultiTSDB) SyncAllTenants(ctx context.Context) (int, error)
- func (t *MultiTSDB) TSDBExemplars() map[string]*exemplars.TSDB
- func (t *MultiTSDB) TSDBLocalClients() []store.Client
- func (t *MultiTSDB) TenantAppendable(tenantID string) (Appendable, error)
- func (t *MultiTSDB) TenantStats(limit int, statsByLabelName string, tenantIDs ...string) []api.TenantStats
- type MultiTSDBOption
- func WithBlockExpandedPostingsCacheSize(size uint64) MultiTSDBOption
- func WithGCImmediately() MultiTSDBOption
- func WithHeadExpandedPostingsCacheSize(size uint64) MultiTSDBOption
- func WithMatchersCache(cache storecache.MatchersCache) MultiTSDBOption
- func WithMetricNameFilterEnabled() MultiTSDBOption
- func WithUploadConcurrency(concurrency int) MultiTSDBOption
- type Options
- type ReadyStorage
- func (s *ReadyStorage) Appender(ctx context.Context) (storage.Appender, error)
- func (s *ReadyStorage) Close() error
- func (s *ReadyStorage) ExemplarQuerier(ctx context.Context) (storage.ExemplarQuerier, error)
- func (s *ReadyStorage) Get() *tsdb.DB
- func (s *ReadyStorage) Querier(mint, maxt int64) (storage.Querier, error)
- func (s *ReadyStorage) Set(db *tsdb.DB)
- func (s *ReadyStorage) StartTime() (int64, error)
- type ReceiveAppender
- type ReceiverMode
- type ReplicationProtocol
- type RootLimitsConfig
- type ShuffleShardingConfig
- type ShuffleShardingOverrideConfig
- type SingleNodeHashring
- type TSDBStats
- type TenantStorage
- type TenantsWriteLimitsConfig
- type UnRegisterer
- type WriteLimitConfig
- type WriteLimitsConfig
- type WriteableStoreAsyncClient
- type Writer
- type WriterOptions
Constants ¶
const ( RouterOnly ReceiverMode = "RouterOnly" IngestorOnly ReceiverMode = "IngestorOnly" RouterIngestor ReceiverMode = "RouterIngestor" DefaultCapNProtoPort string = "19391" )
const ( // TenantMatcherTypeExact matches tenants exactly. This is also the default one. TenantMatcherTypeExact tenantMatcher = "exact" // TenantMatcherGlob matches tenants using glob patterns. TenantMatcherGlob tenantMatcher = "glob" )
const ( // DefaultStatsLimit is the default value used for limiting tenant stats. DefaultStatsLimit = 10 // DefaultReplicaHeader is the default header used to designate the replica count of a write request. DefaultReplicaHeader = "THANOS-REPLICA" // AllTenantsQueryParam is the query parameter for getting TSDB stats for all tenants. AllTenantsQueryParam = "all_tenants" // LimitStatsQueryParam is the query parameter for limiting the amount of returned TSDB stats. LimitStatsQueryParam = "limit" )
const DELETE_DATA closeDelete = 0
const KEEP_DATA closeDelete = 1
Variables ¶
var ErrNotReady = errors.New("TSDB not ready")
ErrNotReady is returned if the underlying storage is not ready yet.
Functions ¶
func ConfigFromWatcher ¶ added in v0.32.0
func ConfigFromWatcher(ctx context.Context, updates chan<- []HashringConfig, cw *ConfigWatcher) error
func NewEmptyRequestLimitsConfig ¶ added in v0.29.0
func NewEmptyRequestLimitsConfig() *requestLimitsConfig
func NewHeadSeriesLimit ¶ added in v0.29.0
func NewHeadSeriesLimit(w WriteLimitsConfig, registerer prometheus.Registerer, logger log.Logger) *headSeriesLimit
func NewNopSeriesLimit ¶ added in v0.28.0
func NewNopSeriesLimit() *nopSeriesLimit
func ShuffleShardExpectedInstancesPerZone ¶ added in v0.39.0
ShuffleShardExpectedInstancesPerZone returns the expected number of instances per zone for a given shard size and number of zones. Copied from Cortex. Copyright Cortex Authors.
func ShuffleShardSeed ¶ added in v0.39.0
ShuffleShardSeed returns seed for random number generator, computed from provided identifier. Copied from Cortex. Copyright Cortex Authors.
Types ¶
type Appendable ¶
Appendable returns an Appender.
type CapNProtoHandler ¶ added in v0.37.0
type CapNProtoHandler struct {
// contains filtered or unexported fields
}
func NewCapNProtoHandler ¶ added in v0.37.0
func NewCapNProtoHandler(logger log.Logger, writer *CapNProtoWriter) *CapNProtoHandler
func (CapNProtoHandler) Write ¶ added in v0.37.0
func (c CapNProtoHandler) Write(ctx context.Context, call writecapnp.Writer_write) error
type CapNProtoServer ¶ added in v0.37.0
type CapNProtoServer struct {
// contains filtered or unexported fields
}
func NewCapNProtoServer ¶ added in v0.37.0
func NewCapNProtoServer(listener net.Listener, handler *CapNProtoHandler, logger log.Logger) *CapNProtoServer
func (*CapNProtoServer) ListenAndServe ¶ added in v0.37.0
func (c *CapNProtoServer) ListenAndServe() error
func (*CapNProtoServer) Shutdown ¶ added in v0.37.0
func (c *CapNProtoServer) Shutdown()
type CapNProtoWriter ¶ added in v0.37.0
type CapNProtoWriter struct {
// contains filtered or unexported fields
}
func NewCapNProtoWriter ¶ added in v0.37.0
func NewCapNProtoWriter(logger log.Logger, multiTSDB TenantStorage, opts *CapNProtoWriterOptions) *CapNProtoWriter
func (*CapNProtoWriter) Write ¶ added in v0.37.0
func (r *CapNProtoWriter) Write(ctx context.Context, tenantID string, wreq *writecapnp.Request) error
type CapNProtoWriterOptions ¶ added in v0.37.0
type CapNProtoWriterOptions struct {
TooFarInFutureTimeWindow int64 // Unit: nanoseconds
}
type ConfigWatcher ¶
type ConfigWatcher struct {
// contains filtered or unexported fields
}
ConfigWatcher is able to watch a file containing a hashring configuration for updates.
func NewConfigWatcher ¶
func NewConfigWatcher(logger log.Logger, reg prometheus.Registerer, path string, interval model.Duration) (*ConfigWatcher, error)
NewConfigWatcher creates a new ConfigWatcher.
func (*ConfigWatcher) C ¶
func (cw *ConfigWatcher) C() <-chan []HashringConfig
C returns a chan that gets hashring configuration updates.
func (*ConfigWatcher) Run ¶
func (cw *ConfigWatcher) Run(ctx context.Context)
Run starts the ConfigWatcher until the given context is canceled.
func (*ConfigWatcher) Stop ¶ added in v0.15.0
func (cw *ConfigWatcher) Stop()
Stop shuts down the config watcher.
func (*ConfigWatcher) ValidateConfig ¶ added in v0.12.0
func (cw *ConfigWatcher) ValidateConfig() error
ValidateConfig returns an error if the configuration that's being watched is not valid.
type DefaultLimitsConfig ¶ added in v0.29.0
type DefaultLimitsConfig struct {
// RequestLimits holds the difficult per-request limits.
RequestLimits requestLimitsConfig `yaml:"request"`
// HeadSeriesLimit specifies the maximum number of head series allowed for any tenant.
HeadSeriesLimit uint64 `yaml:"head_series_limit"`
}
type Endpoint ¶ added in v0.32.0
type Endpoint struct {
Address string `json:"address"`
CapNProtoAddress string `json:"capnproto_address"`
AZ string `json:"az"`
}
func (*Endpoint) HasAddress ¶ added in v0.37.0
func (*Endpoint) UnmarshalJSON ¶ added in v0.32.0
type GlobalLimitsConfig ¶ added in v0.29.0
type GlobalLimitsConfig struct {
// MaxConcurrency represents the maximum concurrency during write operations.
MaxConcurrency int64 `yaml:"max_concurrency"`
// MetaMonitoring options specify the query, url and client for Query API address used in head series limiting.
MetaMonitoringURL string `yaml:"meta_monitoring_url"`
MetaMonitoringHTTPClient *clientconfig.HTTPClientConfig `yaml:"meta_monitoring_http_client"`
MetaMonitoringLimitQuery string `yaml:"meta_monitoring_limit_query"`
// contains filtered or unexported fields
}
type Handler ¶
type Handler struct {
Limiter *Limiter
// contains filtered or unexported fields
}
Handler serves a Prometheus remote write receiving HTTP endpoint.
func (*Handler) Hashring ¶
Hashring sets the hashring for the handler and marks the hashring as ready. The hashring must be set to a non-nil value in order for the handler to be ready and usable. If the hashring is nil, then the handler is marked as not ready.
func (*Handler) RemoteWrite ¶ added in v0.11.0
func (h *Handler) RemoteWrite(ctx context.Context, r *storepb.WriteRequest) (*storepb.WriteResponse, error)
RemoteWrite implements the gRPC remote write handler for storepb.WriteableStore.
type Hashring ¶
type Hashring interface {
// GetN returns the nth node that should handle the given tenant and time series.
GetN(tenant string, timeSeries *prompb.TimeSeries, n uint64) (Endpoint, error)
// Nodes returns a sorted slice of nodes that are in this hashring. Addresses could be duplicated
// if, for example, the same address is used for multiple tenants in the multi-hashring.
Nodes() []Endpoint
Close()
}
Hashring finds the correct node to handle a given time series for a specified tenant. It returns the node and any error encountered.
func NewMultiHashring ¶ added in v0.32.0
func NewMultiHashring(algorithm HashringAlgorithm, replicationFactor uint64, cfg []HashringConfig, reg prometheus.Registerer) (Hashring, error)
newMultiHashring creates a multi-tenant hashring for a given slice of groups. Which hashring to use for a tenant is determined by the tenants field of the hashring configuration.
type HashringAlgorithm ¶ added in v0.27.0
type HashringAlgorithm string
HashringAlgorithm is the algorithm used to distribute series in the ring.
const ( AlgorithmHashmod HashringAlgorithm = "hashmod" AlgorithmKetama HashringAlgorithm = "ketama" // SectionsPerNode is the number of sections in the ring assigned to each node // in the ketama hashring. A higher number yields a better series distribution, // but also comes with a higher memory cost. SectionsPerNode = 1000 )
type HashringConfig ¶
type HashringConfig struct {
Hashring string `json:"hashring,omitempty"`
Tenants []string `json:"tenants,omitempty"`
TenantMatcherType tenantMatcher `json:"tenant_matcher_type,omitempty"`
Endpoints []Endpoint `json:"endpoints"`
Algorithm HashringAlgorithm `json:"algorithm,omitempty"`
ExternalLabels labels.Labels `json:"external_labels,omitempty"`
// If non-zero then enable shuffle sharding.
ShuffleShardingConfig ShuffleShardingConfig `json:"shuffle_sharding_config,omitempty"`
}
HashringConfig represents the configuration for a hashring a receive node knows about.
func ParseConfig ¶ added in v0.32.0
func ParseConfig(content []byte) ([]HashringConfig, error)
ParseConfig parses the raw configuration content and returns a HashringConfig.
type Limiter ¶ added in v0.29.0
Limiter is responsible for managing the configuration and initialization of different types that apply limits to the Receive instance.
func NewLimiter ¶ added in v0.29.0
func NewLimiter(configFile fileContent, reg prometheus.Registerer, r ReceiverMode, logger log.Logger, configReloadTimer time.Duration) (*Limiter, error)
NewLimiter creates a new *Limiter given a configuration and prometheus registerer.
func (*Limiter) HeadSeriesLimiter ¶ added in v0.29.0
func (l *Limiter) HeadSeriesLimiter() headSeriesLimiter
func (*Limiter) RequestLimiter ¶ added in v0.29.0
func (l *Limiter) RequestLimiter() requestLimiter
RequestLimiter is a safe getter for the request limiter.
func (*Limiter) StartConfigReloader ¶ added in v0.29.0
StartConfigReloader starts the automatic configuration reloader based off of the file indicated by pathOrContent. It starts a Go routine in the given *run.Group.
type MultiTSDB ¶ added in v0.13.0
type MultiTSDB struct {
// contains filtered or unexported fields
}
func NewMultiTSDB ¶ added in v0.13.0
func NewMultiTSDB( dataDir *os.Root, l log.Logger, reg prometheus.Registerer, tsdbOpts *tsdb.Options, labels labels.Labels, tenantLabelName string, bucket objstore.Bucket, allowOutOfOrderUpload bool, skipCorruptedBlocks bool, hashFunc metadata.HashFunc, options ...MultiTSDBOption, ) *MultiTSDB
NewMultiTSDB creates a new MultiTSDB instance.
State machine for tenants: - Modifying the state of MultiTSDB so we need to protect this with a lock.
- First request comes in for tenant T. It is created automatically.
- The TSDB of T is synchronously initialized if not already initialized.
- The MultiTSDB clients list is updated.
Tenant T can be: active, GC ready / read-only, deleted.
Periodically, in a randomized manner compaction happens. This needs to be a tenant level operation so no need to lock MultiTSDB. If the tenant is a read-only mode then we need to skip it.
Periodically, check if compaction needs to happen for each tenant. This is a tenant-level operation. Upload data if needed.
Periodically, prune tenants that have not received data for longer than retention period. First, mark that tenant as GC ready / read-only. Only do this for tenants that have all blocks uploaded.
If a write comes in for a tenant that is GC ready / read-only, we need to switch it back to active mode.
After a tenant is marked as GC ready / read-only, check after 1 minute if no writes have happened. If no writes happened, take a MultiTSDB lock and remove the tenant from the list. Update clients.
Invariants: - Any object storage operations must not block reading or writing new samples.
func (*MultiTSDB) Prune ¶ added in v0.28.0
Prune flushes and closes the TSDB for tenants that haven't received any new samples for longer than the TSDB retention period.
func (*MultiTSDB) RemoveLockFilesIfAny ¶ added in v0.15.0
func (*MultiTSDB) SetHashringConfig ¶ added in v0.32.0
func (t *MultiTSDB) SetHashringConfig(cfg []HashringConfig) error
func (*MultiTSDB) SyncAllTenants ¶ added in v0.42.0
func (*MultiTSDB) TSDBExemplars ¶ added in v0.22.0
TSDBExemplars should be used as read-only.
func (*MultiTSDB) TSDBLocalClients ¶ added in v0.29.0
TSDBLocalClients should be used as read-only.
func (*MultiTSDB) TenantAppendable ¶ added in v0.13.0
func (t *MultiTSDB) TenantAppendable(tenantID string) (Appendable, error)
func (*MultiTSDB) TenantStats ¶ added in v0.28.0
type MultiTSDBOption ¶ added in v0.37.0
type MultiTSDBOption func(mt *MultiTSDB)
MultiTSDBOption is a functional option for MultiTSDB.
func WithBlockExpandedPostingsCacheSize ¶ added in v0.38.0
func WithBlockExpandedPostingsCacheSize(size uint64) MultiTSDBOption
func WithGCImmediately ¶ added in v0.42.0
func WithGCImmediately() MultiTSDBOption
func WithHeadExpandedPostingsCacheSize ¶ added in v0.38.0
func WithHeadExpandedPostingsCacheSize(size uint64) MultiTSDBOption
func WithMatchersCache ¶ added in v0.38.0
func WithMatchersCache(cache storecache.MatchersCache) MultiTSDBOption
func WithMetricNameFilterEnabled ¶ added in v0.37.0
func WithMetricNameFilterEnabled() MultiTSDBOption
WithMetricNameFilterEnabled enables metric name filtering on TSDB clients.
func WithUploadConcurrency ¶ added in v0.41.0
func WithUploadConcurrency(concurrency int) MultiTSDBOption
type Options ¶
type Options struct {
Writer *Writer
ListenAddress string
Registry *prometheus.Registry
TenantHeader string
TenantField string
DefaultTenantID string
ReplicaHeader string
Endpoint string
ReplicationFactor uint64
SplitTenantLabelName string
ReceiverMode ReceiverMode
Tracer opentracing.Tracer
TLSConfig *tls.Config
DialOpts []grpc.DialOption
ForwardTimeout time.Duration
MaxBackoff time.Duration
MaxArtificialDelay time.Duration
RelabelConfigs []*relabel.Config
TSDBStats TSDBStats
Limiter *Limiter
AsyncForwardWorkerCount uint
ReplicationProtocol ReplicationProtocol
OtlpEnableTargetInfo bool
OtlpResourceAttributes []string
}
Options for the web Handler.
type ReadyStorage ¶ added in v0.13.0
type ReadyStorage struct {
// contains filtered or unexported fields
}
ReadyStorage implements the Storage interface while allowing to set the actual storage at a later point in time. TODO: Replace this with upstream Prometheus implementation when it is exposed.
func (*ReadyStorage) Close ¶ added in v0.13.0
func (s *ReadyStorage) Close() error
Close implements the Storage interface.
func (*ReadyStorage) ExemplarQuerier ¶ added in v0.22.0
func (s *ReadyStorage) ExemplarQuerier(ctx context.Context) (storage.ExemplarQuerier, error)
ExemplarQuerier implements the Storage interface.
func (*ReadyStorage) Querier ¶ added in v0.13.0
func (s *ReadyStorage) Querier(mint, maxt int64) (storage.Querier, error)
Querier implements the Storage interface.
func (*ReadyStorage) Set ¶ added in v0.13.0
func (s *ReadyStorage) Set(db *tsdb.DB)
Set the storage.
func (*ReadyStorage) StartTime ¶ added in v0.13.0
func (s *ReadyStorage) StartTime() (int64, error)
StartTime implements the Storage interface.
type ReceiveAppender ¶ added in v0.32.0
Wraps storage.Appender to add validation and logging.
type ReceiverMode ¶ added in v0.22.0
type ReceiverMode string
type ReplicationProtocol ¶ added in v0.37.0
type ReplicationProtocol string
const ( ProtobufReplication ReplicationProtocol = "protobuf" CapNProtoReplication ReplicationProtocol = "capnproto" )
type RootLimitsConfig ¶ added in v0.29.0
type RootLimitsConfig struct {
// WriteLimits hold the limits for writing data.
WriteLimits WriteLimitsConfig `yaml:"write"`
}
RootLimitsConfig is the root configuration for limits.
func ParseLimitConfigContent ¶ added in v0.29.0
func ParseLimitConfigContent(limitsConfig fileContent) (*RootLimitsConfig, error)
ParseLimitConfigContent parses the limit configuration from the path or content.
func ParseRootLimitConfig ¶ added in v0.29.0
func ParseRootLimitConfig(content []byte) (*RootLimitsConfig, error)
ParseRootLimitConfig parses the root limit configuration. Even though the result is a pointer, it will only be nil if an error is returned.
func (RootLimitsConfig) AreHeadSeriesLimitsConfigured ¶ added in v0.29.0
func (r RootLimitsConfig) AreHeadSeriesLimitsConfigured() bool
type ShuffleShardingConfig ¶ added in v0.39.0
type ShuffleShardingConfig struct {
ShardSize int `json:"shard_size"`
CacheSize int `json:"cache_size"`
// ZoneAwarenessDisabled disables zone awareness. We still try to spread the load
// across the available zones, but we don't try to balance the shards across zones.
ZoneAwarenessDisabled bool `json:"zone_awareness_disabled"`
Overrides []ShuffleShardingOverrideConfig `json:"overrides,omitempty"`
}
type ShuffleShardingOverrideConfig ¶ added in v0.39.0
type SingleNodeHashring ¶
type SingleNodeHashring string
SingleNodeHashring always returns the same node.
func (SingleNodeHashring) Close ¶ added in v0.39.0
func (s SingleNodeHashring) Close()
func (SingleNodeHashring) GetN ¶
func (s SingleNodeHashring) GetN(_ string, _ *prompb.TimeSeries, n uint64) (Endpoint, error)
GetN implements the Hashring interface.
func (SingleNodeHashring) Nodes ¶ added in v0.34.0
func (s SingleNodeHashring) Nodes() []Endpoint
type TSDBStats ¶ added in v0.28.0
type TSDBStats interface {
// TenantStats returns TSDB head stats for the given tenants.
// If no tenantIDs are provided, stats for all tenants are returned.
TenantStats(limit int, statsByLabelName string, tenantIDs ...string) []api.TenantStats
}
type TenantStorage ¶ added in v0.13.0
type TenantStorage interface {
TenantAppendable(string) (Appendable, error)
}
type TenantsWriteLimitsConfig ¶ added in v0.29.0
type TenantsWriteLimitsConfig map[string]*WriteLimitConfig
TenantsWriteLimitsConfig is a map of tenant IDs to their *WriteLimitConfig.
type UnRegisterer ¶ added in v0.8.0
type UnRegisterer struct {
// contains filtered or unexported fields
}
UnRegisterer is a Prometheus registerer that ensures that collectors can be registered by unregistering already-registered collectors. FlushableStorage uses this registerer in order to not lose metric values between DB flushes.
This type cannot embed the inner registerer, because Prometheus since v2.39.0 is wrapping the Registry with prometheus.WrapRegistererWithPrefix. This wrapper will call the Register function of the wrapped registerer. If UnRegisterer is the wrapped registerer, this would end up calling the inner registerer's Register, which doesn't implement the "unregister" logic that this type intends to use.
func NewUnRegisterer ¶ added in v0.29.0
func NewUnRegisterer(inner prometheus.Registerer) *UnRegisterer
func (*UnRegisterer) MustRegister ¶ added in v0.8.0
func (u *UnRegisterer) MustRegister(cs ...prometheus.Collector)
MustRegister registers the given collectors. It panics if an error happens. Note that if a collector is already registered it will be re-registered without panicking.
func (*UnRegisterer) Register ¶ added in v0.29.0
func (u *UnRegisterer) Register(c prometheus.Collector) error
Register registers the given collector. If it's already registered, it will be unregistered and registered.
func (*UnRegisterer) Unregister ¶ added in v0.29.0
func (u *UnRegisterer) Unregister(c prometheus.Collector) bool
Unregister unregisters the given collector.
func (*UnRegisterer) UnregisterAll ¶ added in v0.41.0
func (u *UnRegisterer) UnregisterAll()
UnregisterAll unregisters all collectors in a best-effort manner.
type WriteLimitConfig ¶ added in v0.29.0
type WriteLimitConfig struct {
// RequestLimits holds the difficult per-request limits.
RequestLimits *requestLimitsConfig `yaml:"request"`
// HeadSeriesLimit specifies the maximum number of head series allowed for a tenant.
HeadSeriesLimit *uint64 `yaml:"head_series_limit"`
}
A tenant might not always have limits configured, so things here must use pointers.
func NewEmptyWriteLimitConfig ¶ added in v0.29.0
func NewEmptyWriteLimitConfig() *WriteLimitConfig
Utils for initializing.
func (*WriteLimitConfig) SetHeadSeriesLimit ¶ added in v0.29.0
func (w *WriteLimitConfig) SetHeadSeriesLimit(val uint64) *WriteLimitConfig
func (*WriteLimitConfig) SetRequestLimits ¶ added in v0.29.0
func (w *WriteLimitConfig) SetRequestLimits(rl *requestLimitsConfig) *WriteLimitConfig
type WriteLimitsConfig ¶ added in v0.29.0
type WriteLimitsConfig struct {
// GlobalLimits are limits that are shared across all tenants.
GlobalLimits GlobalLimitsConfig `yaml:"global"`
// DefaultLimits are the default limits for tenants without specified limits.
DefaultLimits DefaultLimitsConfig `yaml:"default"`
// TenantsLimits are the limits per tenant.
TenantsLimits TenantsWriteLimitsConfig `yaml:"tenants"`
}
type WriteableStoreAsyncClient ¶ added in v0.35.0
type WriteableStoreAsyncClient interface {
storepb.WriteableStoreClient
RemoteWriteAsync(context.Context, *storepb.WriteRequest, endpointReplica, []int, chan writeResponse, func(error))
// TryRemoteWriteAsync submits the request without blocking. Returns false if the peer's
// worker pool is at capacity; the caller should fall back to RemoteWriteAsync.
TryRemoteWriteAsync(context.Context, *storepb.WriteRequest, endpointReplica, []int, chan writeResponse, func(error)) bool
}
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
func NewWriter ¶
func NewWriter(logger log.Logger, multiTSDB TenantStorage, opts *WriterOptions) *Writer