thanos-io/thanos · error

lookup label value

Error message

lookup label value

What it means

Raised in bucketIndexReader.LookupLabelsSymbols when the block's symbol table cannot resolve a series label's value string for the given reference. It indicates index corruption or a symbol table that does not cover the referenced offset, so the label set cannot be materialized and series construction for that block fails.

Solutions

  1. Verify block index integrity (promtool tsx / block verification) for the affected block
  2. Re-download or re-fetch the block's index file from object storage
  3. Exclude or repair the corrupted block; check for truncated uploads
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pkg/store/bucket.go:3535 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/8ee3c1cc9de8e958. Report an issue: GitHub.

Appendix: source

Thrown at pkg/store/bucket.go:3535

	}
	return nil
}

func (b *blockSeriesClient) CloseSend() error {
	return nil
}

// LookupLabelsSymbols allows populates label set strings from symbolized label set.
func (r *bucketIndexReader) LookupLabelsSymbols(ctx context.Context, symbolized []symbolizedLabel, b *labels.Builder) error {
	b.Reset(labels.EmptyLabels())
	for _, s := range symbolized {
		ln, err := r.dec.LookupSymbol(ctx, s.name)
		if err != nil {
			return errors.Wrap(err, "lookup label name")
		}
		lv, err := r.dec.LookupSymbol(ctx, s.value)
		if err != nil {
			return errors.Wrap(err, "lookup label value")
		}
		b.Set(ln, lv)
	}
	return nil
}

// decodeSeriesForTime decodes a series entry from the given byte slice decoding only chunk metas that are within given min and max time.
// If skipChunks is specified decodeSeriesForTime does not return any chunks, but only labels and only if at least single chunk is within time range.
// decodeSeriesForTime returns false, when there are no series data for given time range.
func decodeSeriesForTime(b []byte, lset *[]symbolizedLabel, chks *[]chunks.Meta, skipChunks bool, selectMint, selectMaxt int64) (ok bool, err error) {
	*lset = (*lset)[:0]
	*chks = (*chks)[:0]

	d := encoding.Decbuf{B: b}

	// Read labels without looking up symbols.
	k := d.Uvarint()
	for i := 0; i < k; i++ {

View on GitHub (pinned to 35b8b99117)