thanos-io/thanos · error

corrupted blocks found

Error message

corrupted blocks found

What it means

ErrorSyncBlockCorrupted is a sentinel error raised by the shipper's sync when blockMetasFromOldest detects corrupted block metadata among the blocks being uploaded. It is a generic guard: callers (Sync) deliberately compare against it with errors.Is and may skip corrupted blocks when the skipCorruptedBlocks option is set.

Solutions

  1. Inspect failedBlocks returned by sync to identify the corrupted block IDs
  2. Delete or repair the corrupted local block metadata (meta.json) and re-sync
  3. Set --skip-corrupted-blocks to continue uploading healthy blocks while ignoring corrupted ones
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at pkg/shipper/shipper.go:95 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/5e796cdb2cc4e9a1. Report an issue: GitHub.

Appendix: source

Thrown at pkg/shipper/shipper.go:95

	logger           log.Logger
	dir              *os.Root
	metrics          *metrics
	bucket           objstore.Bucket
	source           metadata.SourceType
	metadataFilePath string

	uploadCompacted        bool
	allowOutOfOrderUploads bool
	skipCorruptedBlocks    bool
	hashFunc               metadata.HashFunc
	uploadConcurrency      int

	labels func() labels.Labels
	mtx    sync.RWMutex
}

var (
	ErrorSyncBlockCorrupted = errors.New("corrupted blocks found")
)

type shipperOptions struct {
	logger                 log.Logger
	r                      prometheus.Registerer
	source                 metadata.SourceType
	hashFunc               metadata.HashFunc
	metaFileName           string
	lbls                   func() labels.Labels
	uploadCompacted        bool
	allowOutOfOrderUploads bool
	skipCorruptedBlocks    bool
	uploadConcurrency      int
}

type Option func(*shipperOptions)

// WithLogger sets the logger.

View on GitHub (pinned to 35b8b99117)