{"record":{"id":"6949b80b6a48600d","repo":"t8y2/dbx","slug":"empty-consumer-status-response-from-s","errorCode":null,"errorMessage":"empty consumer status response from %s","messagePattern":"empty consumer status response from (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/rocketmq/consumers.go","lineNumber":341,"sourceCode":"\t}\n\torderedAddresses := append([]string(nil), addresses...)\n\tsort.Strings(orderedAddresses)\n\tmerged := make(map[string]map[string]int64)\n\tsuccessCount := 0\n\tvar lastErr error\n\tfor _, address := range orderedAddresses {\n\t\tfields := map[string]string{\"topic\": topic, \"group\": groupID}\n\t\tif clientAddr != \"\" {\n\t\t\tfields[\"clientAddr\"] = clientAddr\n\t\t}\n\t\tresponse, requestErr := invoke(ctx, address,\n\t\t\tremoting.NewRequest(remoting.InvokeBrokerToGetConsumerStatus, fields))\n\t\tif requestErr != nil {\n\t\t\tlastErr = requestErr\n\t\t\tcontinue\n\t\t}\n\t\tif response == nil {\n\t\t\tlastErr = fmt.Errorf(\"empty consumer status response from %s\", address)\n\t\t\tcontinue\n\t\t}\n\t\tpartial, decodeErr := decodeConsumerStatus(response.Body)\n\t\tif decodeErr != nil {\n\t\t\tlastErr = decodeErr\n\t\t\tcontinue\n\t\t}\n\t\tsuccessCount++\n\t\tfor _, clientID := range sortedKeys(partial) {\n\t\t\tif merged[clientID] == nil {\n\t\t\t\tmerged[clientID] = make(map[string]int64)\n\t\t\t}\n\t\t\tfor _, queueKey := range sortedKeys(partial[clientID]) {\n\t\t\t\tmerged[clientID][queueKey] = partial[clientID][queueKey]\n\t\t\t}\n\t\t}\n\t}\n\tif successCount == 0 {","sourceCodeStart":323,"sourceCodeEnd":359,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/rocketmq/consumers.go#L323-L359","documentation":"While iterating broker addresses, a nil response object (no body/failed remoting reply without an error) is recorded as lastErr with this message and the loop continues to the next broker, keeping partial results semantics.","triggerScenarios":"A broker accepts the InvokeBrokerToGetConsumerStatus request but returns a nil response — broker overload, connection drop mid-call, or remoting layer returning nil on protocol failure.","commonSituations":"Broker under heavy load dropping replies; network flakiness between client and brokers; older broker versions replying malformed/empty to the status opcode; all brokers returning nil surfaces this as the final error.","solutions":["Retry GetConsumeStatus — transient nil responses often clear on subsequent polls","Check broker logs/health for the address named in the error","Upgrade broker/client remoting versions if empty replies are reproducible"],"exampleFix":"// caller-side retry\nstatus, err := agent.GetConsumeStatus(ctx, topic, group)\nif err != nil {\n    status, err = agent.GetConsumeStatus(ctx, topic, group) // retry transient nil response\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"status, err := GetConsumeStatus(ctx, topic, group)\nif err != nil && strings.Contains(err.Error(), \"empty consumer status response\") {\n    if status, err = GetConsumeStatus(ctx, topic, group); err != nil {\n        return fmt.Errorf(\"consume status unavailable: %w\", err)\n    }\n}","preventionTips":["Retry status queries; broker replies can be transiently nil","Check broker versions support InvokeBrokerToGetConsumerStatus","Monitor broker load — overloaded brokers drop responses"],"tags":["broker","remoting","empty-response"],"backgroundTag":"empty-broker-response","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}