{"record":{"id":"96a310000ea8e3de","repo":"hyperledger/fabric","slug":"timed-out-waiting-for-txid-on-all-peers","errorCode":null,"errorMessage":"timed out waiting for txid on all peers","messagePattern":"timed out waiting for txid on all peers","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/peer/chaincode/common.go","lineNumber":714,"sourceCode":"func (dg *DeliverGroup) Wait(ctx context.Context) error {\n\tif len(dg.Clients) == 0 {\n\t\treturn nil\n\t}\n\n\tdg.wg.Add(len(dg.Clients))\n\tfor _, client := range dg.Clients {\n\t\tgo dg.ClientWait(client)\n\t}\n\treadyCh := make(chan struct{})\n\tgo dg.WaitForWG(readyCh)\n\n\tselect {\n\tcase <-readyCh:\n\t\tif dg.Error != nil {\n\t\t\treturn dg.Error\n\t\t}\n\tcase <-ctx.Done():\n\t\terr := errors.New(\"timed out waiting for txid on all peers\")\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// ClientWait waits for the specified deliver client to receive\n// a block event with the requested txid\nfunc (dg *DeliverGroup) ClientWait(dc *DeliverClient) {\n\tdefer dg.wg.Done()\n\tfor {\n\t\tresp, err := dc.Connection.Recv()\n\t\tif err != nil {\n\t\t\terr = errors.WithMessagef(err, \"error receiving from deliver filtered at %s\", dc.Address)\n\t\t\tdg.setError(err)\n\t\t\treturn\n\t\t}\n\t\tswitch r := resp.Type.(type) {","sourceCodeStart":696,"sourceCodeEnd":732,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/peer/chaincode/common.go#L696-L732","documentation":"DeliverGroup.Wait blocks until every peer in the group has observed the transaction ID in a delivered block, bounded by the context timeout. If the transaction is not seen on all peers before the timeout, this error is returned.","triggerScenarios":"Invoke with --waitForEvent where the tx is committed slowly (ordering backlog, slow validation) or never commits on some peer (that peer behind/lagged), exceeding --waitForEventTimeout.","commonSituations":"Congested orderer service delaying block creation; a peer that rejected the tx (different validation result) so its event never arrives; large batches with default 30s timeout.","solutions":["Increase --waitForEventTimeout to exceed worst-case commit latency","Check each peer's commit status (peer channel fetch / logs) to find which peer lagged or rejected the tx","Inspect orderer metrics/logs for backlog; scale orderers or increase batch timeouts","Verify the tx actually committed via `peer chaincode query` or block exploration"],"exampleFix":"// before\npeer chaincode invoke ... --waitForEvent --waitForEventTimeout 30s\n// after\npeer chaincode invoke ... --waitForEvent --waitForEventTimeout 300s","handlingStrategy":"retry","validationCode":"// verify tx committed via query before relying on waitForEvent\n_, err := cli.Query(channelID, chaincodeName, args)\nif err != nil { /* tx may not have committed on all peers */ }","typeGuard":null,"tryCatchPattern":"if strings.Contains(err.Error(), \"timed out waiting for txid\") {\n    // poll commit status / query until confirmed or permanent failure\n    return pollCommitStatus(txID, extendedDeadline)\n}","preventionTips":["Set generous --waitForEventTimeout under load","Monitor peer lag and orderer backlog","Investigate any tx that times out — it may have failed validation on some peer"],"tags":["fabric","deliver","timeout","commit"],"backgroundTag":"txid-wait-timeout","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"}