thanos-io/thanos · error

fetch series for

Error message

fetch series for %s %s

What it means

The initial Series RPC to a store failed before any streaming began, so no async response set could be created for that store. The wrapped error carries the store identity and address; depending on the partial-response strategy it either fails the query or is emitted as a warning series while other stores' results continue.

Solutions

  1. Verify the failing store is running and its StoreAPI endpoint is correct
  2. Check gRPC TLS, timeouts and service discovery for the query-to-store path
  3. Inspect store logs for why the Series call was rejected (e.g. cancel, invalid request)
  4. Retry once the store is healthy; combine with partial-response mode
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pkg/store/proxy_merge.go:602 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/9c6455e052a4433c. Report an issue: GitHub.

Appendix: source

Thrown at pkg/store/proxy_merge.go:602

	var cancel context.CancelFunc

	storeID, storeAddr := storeInfo(st)
	seriesCtx := grpc_opentracing.ClientAddContextTags(ctx, opentracing.Tags{
		"target": storeAddr,
	})

	seriesCtx, cancel = context.WithCancel(seriesCtx)

	shardMatcher := shardInfo.Matcher(buffers)

	applySharding := shardInfo != nil && !st.SupportsSharding()
	if applySharding {
		level.Debug(logger).Log("msg", "Applying series sharding in the proxy since there is not support in the underlying store", "store", st.String())
	}

	cl, err := st.Series(seriesCtx, req)
	if err != nil {
		err = errors.Wrapf(err, "fetch series for %s %s", storeID, st)
		cancel()
		return nil, err
	}

	var labelsToRemove map[string]struct{}
	if !st.SupportsWithoutReplicaLabels() && len(req.WithoutReplicaLabels) > 0 {
		level.Warn(logger).Log("msg", "detecting store that does not support without replica label setting. "+
			"Falling back to eager retrieval with additional sort. Make sure your storeAPI supports it to speed up your queries", "store", st.String())
		retrievalStrategy = EagerRetrieval

		labelsToRemove = make(map[string]struct{})
		for _, replicaLabel := range req.WithoutReplicaLabels {
			labelsToRemove[replicaLabel] = struct{}{}
		}
	}

	switch retrievalStrategy {
	case LazyRetrieval:

View on GitHub (pinned to 35b8b99117)