thanos-io/thanos · error

remove mark for

Error message

remove mark %v for %v

What it means

Wraps block.RemoveMark in the mark-block command with --remove: the deletion/no-compact/no-downsample mark file for the given block could not be removed from object storage (network error, missing permissions). Both the block ID and the mark filename being removed are included.

Solutions

  1. Check bucket write/delete permissions
  2. Inspect the wrapped error for the storage cause
  3. Retry after connectivity issues resolve
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at cmd/thanos/tools_bucket.go:1133 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/236b8eb743fd6ec5. Report an issue: GitHub.

Appendix: source

Thrown at cmd/thanos/tools_bucket.go:1133

		for _, id := range tbc.blockIDs {
			u, err := ulid.Parse(id)
			if err != nil {
				return errors.Errorf("block.id is not a valid UUID, got: %v", id)
			}
			ids = append(ids, u)
		}

		if !tbc.removeMarker && tbc.details == "" {
			return errors.Errorf("required flag --details not provided")
		}

		ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
		g.Add(func() error {
			for _, id := range ids {
				if tbc.removeMarker {
					err := block.RemoveMark(ctx, logger, insBkt, id, promauto.With(nil).NewCounter(prometheus.CounterOpts{}), tbc.marker)
					if err != nil {
						return errors.Wrapf(err, "remove mark %v for %v", id, tbc.marker)
					}
					continue
				}
				switch tbc.marker {
				case metadata.DeletionMarkFilename:
					if err := block.MarkForDeletion(ctx, logger, insBkt, id, tbc.details, promauto.With(nil).NewCounter(prometheus.CounterOpts{})); err != nil {
						return errors.Wrapf(err, "mark %v for %v", id, tbc.marker)
					}
				case metadata.NoCompactMarkFilename:
					if err := block.MarkForNoCompact(ctx, logger, insBkt, id, metadata.ManualNoCompactReason, tbc.details, promauto.With(nil).NewCounter(prometheus.CounterOpts{})); err != nil {
						return errors.Wrapf(err, "mark %v for %v", id, tbc.marker)
					}
				case metadata.NoDownsampleMarkFilename:
					if err := block.MarkForNoDownsample(ctx, logger, insBkt, id, metadata.ManualNoDownsampleReason, tbc.details, promauto.With(nil).NewCounter(prometheus.CounterOpts{})); err != nil {
						return errors.Wrapf(err, "mark %v for %v", id, tbc.marker)
					}
				default:
					return errors.Errorf("not supported marker %v", tbc.marker)

View on GitHub (pinned to 35b8b99117)