diff --git a/docs/configuration/README.md b/docs/configuration/README.md index 46b2f399734b..76544e9d6901 100644 --- a/docs/configuration/README.md +++ b/docs/configuration/README.md @@ -244,7 +244,7 @@ The `ingester_config` block configures Ingesters. [lifecycler: ] # Number of times to try and transfer chunks when leaving before -# falling back to flushing to the store. +# falling back to flushing to the store. Zero = no transfers are done. [max_transfer_retries: | default = 10] # How many flushes can happen concurrently from each stream. diff --git a/pkg/ingester/ingester.go b/pkg/ingester/ingester.go index 53bc7a0f2bca..6a5147f38467 100644 --- a/pkg/ingester/ingester.go +++ b/pkg/ingester/ingester.go @@ -60,7 +60,7 @@ type Config struct { func (cfg *Config) RegisterFlags(f *flag.FlagSet) { cfg.LifecyclerConfig.RegisterFlags(f) - f.IntVar(&cfg.MaxTransferRetries, "ingester.max-transfer-retries", 10, "Number of times to try and transfer chunks before falling back to flushing.") + f.IntVar(&cfg.MaxTransferRetries, "ingester.max-transfer-retries", 10, "Number of times to try and transfer chunks before falling back to flushing. If set to 0 or negative value, transfers are disabled.") f.IntVar(&cfg.ConcurrentFlushes, "ingester.concurrent-flushed", 16, "") f.DurationVar(&cfg.FlushCheckPeriod, "ingester.flush-check-period", 30*time.Second, "") f.DurationVar(&cfg.FlushOpTimeout, "ingester.flush-op-timeout", 10*time.Second, "") diff --git a/pkg/ingester/transfer.go b/pkg/ingester/transfer.go index f9da369fe7da..fb6dde6c9269 100644 --- a/pkg/ingester/transfer.go +++ b/pkg/ingester/transfer.go @@ -171,6 +171,10 @@ func (i *Ingester) StopIncomingRequests() { // TransferOut implements ring.Lifecycler. func (i *Ingester) TransferOut(ctx context.Context) error { + if i.cfg.MaxTransferRetries <= 0 { + return fmt.Errorf("transfers disabled") + } + backoff := util.NewBackoff(ctx, util.BackoffConfig{ MinBackoff: 100 * time.Millisecond, MaxBackoff: 5 * time.Second,