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
- Check bucket write/delete permissions
- Inspect the wrapped error for the storage cause
- 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)