thanos-io/thanos · error

repair is specified, so backup client is required

Error message

repair is specified, so backup client is required

What it means

`thanos tools bucket repair` was requested but no backup object store was configured (--objstore-backup). Repair mutates blocks destructively, so without a backup bucket the tool refuses to run. Input at fault: missing backup config.

Solutions

  1. Configure --objstore-backup.config-file with a valid backup bucket
  2. Or drop the --repair flag if repair is not intended
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cmd/thanos/tools_bucket.go:363 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07). Data as JSON: /api/errors/129f8085eca91906. Report an issue: GitHub.

Appendix: source

Thrown at cmd/thanos/tools_bucket.go:363

			return err
		}

		bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String(), nil)
		if err != nil {
			return err
		}
		insBkt := objstoretracing.WrapWithTraces(objstore.WrapWithMetrics(bkt, extprom.WrapRegistererWithPrefix("thanos_", reg), bkt.Name()))
		defer runutil.CloseWithLogOnErr(logger, insBkt, "bucket client")

		backupconfContentYaml, err := objStoreBackupConfig.Content()
		if err != nil {
			return err
		}

		var backupBkt objstore.Bucket
		if len(backupconfContentYaml) == 0 {
			if tbc.repair {
				return errors.New("repair is specified, so backup client is required")
			}
		} else {
			// nil Prometheus registerer: don't create conflicting metrics.
			backupBkt, err = client.NewBucket(logger, backupconfContentYaml, component.Bucket.String(), nil)
			if err != nil {
				return err
			}
			insBkt = objstoretracing.WrapWithTraces(objstore.WrapWithMetrics(bkt, nil, bkt.Name()))

			defer runutil.CloseWithLogOnErr(logger, backupBkt, "backup bucket client")
		}

		// Dummy actor to immediately kill the group after the run function returns.
		g.Add(func() error { return nil }, func(error) {})

		r, err := issuesVerifiersRegistry.SubstractByIDs(tbc.issuesToVerify, tbc.repair)
		if err != nil {
			return err

View on GitHub (pinned to 35b8b99117)