{"record":{"id":"047df365619447b1","repo":"hyperledger/fabric","slug":"failed-unmarshalling-gossip-envelope-to-alive-mess","errorCode":null,"errorMessage":"failed unmarshalling gossip envelope to alive message","messagePattern":"failed unmarshalling gossip envelope to alive message","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"discovery/client/client.go","lineNumber":537,"sourceCode":"\t\t\tpeer, err := endorser(p, desc.Chaincode, channel)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Wrap(err, \"failed creating endorser object\")\n\t\t\t}\n\t\t\tendorsers = append(endorsers, peer)\n\t\t}\n\t\tdescriptor.endorsersByGroups[grp] = endorsers\n\t}\n\n\treturn descriptor, nil\n}\n\nfunc endorser(peer *discovery.Peer, chaincode, channel string) (*Peer, error) {\n\tif peer.MembershipInfo == nil || peer.StateInfo == nil {\n\t\treturn nil, errors.Errorf(\"received empty envelope(s) for endorsers for chaincode %s, channel %s\", chaincode, channel)\n\t}\n\taliveMsg, err := gprotoext.EnvelopeToGossipMessage(peer.MembershipInfo)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed unmarshalling gossip envelope to alive message\")\n\t}\n\tstateInfMsg, err := gprotoext.EnvelopeToGossipMessage(peer.StateInfo)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed unmarshalling gossip envelope to state info message\")\n\t}\n\tif err := validateAliveMessage(aliveMsg); err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed validating alive message\")\n\t}\n\tif err := validateStateInfoMessage(stateInfMsg); err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed validating stateInfo message\")\n\t}\n\tsID := &msp.SerializedIdentity{}\n\tif err := proto.Unmarshal(peer.Identity, sID); err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed unmarshalling peer's identity\")\n\t}\n\treturn &Peer{\n\t\tIdentity:         peer.Identity,\n\t\tStateInfoMessage: stateInfMsg,","sourceCodeStart":519,"sourceCodeEnd":555,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/discovery/client/client.go#L519-L555","documentation":"When converting the peer's MembershipInfo envelope to a SignedGossipMessage via gprotoext.EnvelopeToGossipMessage fails, the error is wrapped as \"failed unmarshalling gossip envelope to alive message\". The payload bytes are not a valid gossip Alive message — corrupt, truncated, or of an unexpected message type (possibly from a different Fabric protocol version).","triggerScenarios":"discovery.Peer.MembershipInfo payload cannot be protobuf-unmarshalled or is not an AliveMsg (payload nil / wrong GossipMessage tag) during endorser construction in a chaincode query response.","commonSituations":"Fabric version skew between client and peers (changed gossip proto); a server bug or corrupted discovery cache; bytes from a non-gossip source substituted for membership data; network/proxy corruption in cached discovery responses.","solutions":["Unwrap the inner error to see whether it's an unmarshal failure or a wrong message type","Align Fabric client and peer versions (gossip proto compatibility)","Retry the discovery query to get a fresh response from the server","Restart the peer's gossip service / clear stale discovery state if corruption persists","Validate that no intermediary (proxy, cache) is mangling discovery responses"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Sanity-check membership payload size before trusting it\nif p.MembershipInfo == nil || len(p.MembershipInfo.Payload) == 0 {\n\treturn errors.New(\"peer membership payload is empty\")\n}","typeGuard":null,"tryCatchPattern":"_, err := endorser(p, cc, channel)\nif err != nil && strings.Contains(err.Error(), \"alive message\") {\n\t// could be version skew or corruption; refresh discovery\n\treturn refreshDiscoveryAndRetry(ctx)\n}","preventionTips":["Run a Fabric client version matching the peers' gossip protocol","Retry discovery on unmarshal failures before treating as fatal","Avoid intermediaries that cache or transform discovery responses","Monitor peer gossip health"],"tags":["hyperledger-fabric","gossip","unmarshalling","proto"],"backgroundTag":"gossip-envelope-unmarshal-failed","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"}