{"record":{"id":"c86b520b5156d592","repo":"thanos-io/thanos","slug":"receive-series-from-s","errorCode":null,"errorMessage":"receive series from %s","messagePattern":"receive series from (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/store/proxy_merge.go","lineNumber":491,"sourceCode":"\t\t\tresp, err := cl.Recv()\n\t\t\tif err != nil {\n\t\t\t\tif err == io.EOF {\n\t\t\t\t\tl.bufferedResponsesMtx.Lock()\n\t\t\t\t\tl.noMoreData = true\n\t\t\t\t\tl.dataOrFinishEvent.Signal()\n\t\t\t\t\tl.bufferedResponsesMtx.Unlock()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tvar rerr error\n\t\t\t\t// If timer is already stopped\n\t\t\t\tif t != nil && !t.Stop() {\n\t\t\t\t\tif t.C != nil {\n\t\t\t\t\t\t<-t.C // Drain the channel if it was already stopped.\n\t\t\t\t\t}\n\t\t\t\t\trerr = errors.Wrapf(err, \"failed to receive any data in %s from %s\", l.frameTimeout, st)\n\t\t\t\t} else {\n\t\t\t\t\trerr = errors.Wrapf(err, \"receive series from %s\", st)\n\t\t\t\t}\n\t\t\t\tl.bufferedResponsesMtx.Lock()\n\t\t\t\tl.rb.append(storepb.NewWarnSeriesResponse(rerr))\n\t\t\t\tl.noMoreData = true\n\t\t\t\tl.dataOrFinishEvent.Signal()\n\t\t\t\tl.bufferedResponsesMtx.Unlock()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif t != nil {\n\t\t\t\t// frameTimeout only applies to cl.Recv() gRPC call because the goroutine may be blocked on waiting for an empty buffer slot.\n\t\t\t\t// Set the timeout to the largest possible value to avoid triggering it.\n\t\t\t\tt.Reset(time.Duration(math.MaxInt64))\n\t\t\t}\n\n\t\t\tnumResponses++\n\t\t\tbytesProcessed += resp.Size()\n\n\t\t\tif resp.GetSeries() != nil && applySharding && !shardMatcher.MatchesZLabels(resp.GetSeries().Labels) {","sourceCodeStart":473,"sourceCodeEnd":509,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/store/proxy_merge.go#L473-L509","documentation":"The gRPC stream Recv() for a Series call returned an error (non-EOF) while lazily pulling series from a store. This is the generic receive failure — RPC error, stream reset, deadline, or store-side failure — wrapped with the store address for attribution; it surfaces as a warning when partial responses are enabled.","triggerScenarios":"Thrown at pkg/store/proxy_merge.go:491 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the named store's logs for the RPC failure cause","Verify gRPC keepalive, timeouts and connection limits between query and store","Retry the query; transient stream resets are common under load","Use partial responses to keep results from healthy stores"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}