{"record":{"id":"6593f32b859ce1ad","repo":"hyperledger/fabric","slug":"sent-d-queries-but-received-d-responses-back","errorCode":null,"errorMessage":"Sent %d queries but received %d responses back","messagePattern":"Sent (.+?) queries but received (.+?) responses back","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"discovery/client/client.go","lineNumber":186,"sourceCode":"\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed signing Request\")\n\t}\n\n\tconn, err := c.createConnection()\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed connecting to discovery service\")\n\t}\n\n\tcl := discovery.NewDiscoveryClient(conn)\n\tresp, err := cl.Discover(ctx, &discovery.SignedRequest{\n\t\tPayload:   payload,\n\t\tSignature: sig,\n\t})\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"discovery service refused our Request\")\n\t}\n\tif n := len(resp.Results); n != req.lastIndex {\n\t\treturn nil, errors.Errorf(\"Sent %d queries but received %d responses back\", req.lastIndex, n)\n\t}\n\treturn req.computeResponse(resp)\n}\n\ntype resultOrError any\n\ntype response map[key]resultOrError\n\ntype localResponse struct {\n\tresponse\n}\n\nfunc (cr *localResponse) Peers() ([]*Peer, error) {\n\treturn parsePeers(protoext.LocalMembershipQueryType, cr.response, \"\")\n}\n\ntype channelResponse struct {\n\tresponse","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/discovery/client/client.go#L168-L204","documentation":"Client.Send in discovery/client/client.go:186 verifies that the number of response Results equals req.lastIndex (the number of queries sent). A mismatch produces errors.Errorf \"Sent %d queries but received %d responses back\". It guards against a server returning an incomplete or inconsistent response set.","triggerScenarios":"The discovery server returns a response whose Results slice length differs from the number of queries added via Add* calls — e.g. server dropped responses, version mismatch between client/server request handling, or reuse of the same Request object across Sends.","commonSituations":"Reusing a Request after a previous Send (lastIndex already incremented); peer/SDK protobuf version skew; server-side errors for individual queries being silently omitted rather than reported.","solutions":["Create a fresh discovery Request per Send call instead of reusing one","Check client and peer versions for protobuf/discovery compatibility","Inspect the response Results for embedded per-query error results that shrink the result count handling","Retry Send once on mismatch; persistent mismatch indicates a server bug — capture logs and file it"],"exampleFix":"// before: reusing request across sends\nreq.AddConfigQuery(\"ch1\")\nclient.Send(ctx, req, auth)\nclient.Send(ctx, req, auth) // lastIndex already > queries sent\n\n// after: fresh request per send\nreq1 := discovery.NewRequest(); req1.AddConfigQuery(\"ch1\")\nclient.Send(ctx, req1, auth)","handlingStrategy":"validation","validationCode":"if n := len(resp.Results); n != numQueriesSent {\n    return fmt.Errorf(\"discarding response: sent %d queries, got %d results\", numQueriesSent, n)\n}","typeGuard":"func responseConsistent(req *discovery.Request, resp *discovery.Response) bool {\n    return len(resp.Results) == len(req.Request.Queries)\n}","tryCatchPattern":"resp, err := client.Send(ctx, req, auth)\nif err != nil && strings.Contains(err.Error(), \"queries but received\") {\n    // rebuild a fresh Request and retry once\n}","preventionTips":["Use a fresh discovery.Request for every Send call","Keep SDK and peer versions aligned","Log the full response when counts mismatch for diagnosis"],"tags":["hyperledger-fabric","discovery-client","protocol-mismatch","response-validation"],"backgroundTag":"response-count-mismatch","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}