hyperledger/fabric · error
failed unmarshalling alive message
Error message
failed unmarshalling alive message
What it means
This error means the discovery service returned a peer membership result whose MembershipInfo envelope could not be parsed into a valid gossip AliveMessage. The client wraps the underlying unmarshalling error with this message when iterating peers for a channel in peersForChannel. It indicates malformed or non-gossip protobuf data in the server's response.
Source
Thrown at discovery/client/client.go:418
}
peers, err2 := peersForChannel(membersRes, qt)
if err2 != nil {
return errors.Wrap(err2, "failed constructing peer membership out of response")
}
resp[key] = peers
}
return nil
}
func peersForChannel(membersRes *discovery.PeerMembershipResult, qt protoext.QueryType) ([]*Peer, error) {
var peers []*Peer
for org, peersOfCurrentOrg := range membersRes.PeersByOrg {
for _, peer := range peersOfCurrentOrg.Peers {
aliveMsg, err := gprotoext.EnvelopeToGossipMessage(peer.MembershipInfo)
if err != nil {
return nil, errors.Wrap(err, "failed unmarshalling alive message")
}
var stateInfoMsg *gprotoext.SignedGossipMessage
if isStateInfoExpected(qt) {
stateInfoMsg, err = gprotoext.EnvelopeToGossipMessage(peer.StateInfo)
if err != nil {
return nil, errors.Wrap(err, "failed unmarshalling stateInfo message")
}
if err := validateStateInfoMessage(stateInfoMsg); err != nil {
return nil, errors.Wrap(err, "failed validating stateInfo message")
}
}
if err := validateAliveMessage(aliveMsg); err != nil {
return nil, errors.Wrap(err, "failed validating alive message")
}
peers = append(peers, &Peer{
MSPID: org,
Identity: peer.Identity,
AliveMessage: aliveMsg,View on GitHub (pinned to 2736b63f8f)
Solutions
- Verify the peer discovery service version matches the client (fabric-sdk-go / fabric-cli vs peer version).
- Re-run with debug logging on the discovery server to inspect what membership data it is returning.
- Check TLS/network integrity — a proxy or MTM tampering can truncate envelopes.
- Retry against a different peer in case the responding peer has corrupted membership state.
- If persistent, restart the misbehaving peer so gossip rebuilds its membership state.
Example fix
// before: blindly using membership result
res, _ := discoveryClient.SendRequest(ctx, req)
peers, err := peersForChannel(res.Results[0], qt) // fails on bad envelope
// after: fail fast with the underlying cause logged
peers, err := peersForChannel(res.Results[0], qt)
if err != nil {
log.Errorf("discovery membership parse failed: %v", errors.Unwrap(err))
return err
} Defensive patterns
Strategy: validation
Validate before calling
func validMembershipEnvelope(env *common.Envelope) bool {
return env != nil && len(env.Payload) > 0
}
// check each peer.MembershipInfo in PeerMembershipResult before sending further requests Type guard
func isAliveMessage(msg *gprotoext.SignedGossipMessage) bool {
return msg != nil && msg.IsAliveMsg()
} Try / catch
peers, err := peersForChannel(res, qt)
if err != nil {
var wrapped error = errors.Unwrap(err)
log.Printf("membership parse failed: %v", wrapped)
return nil, fmt.Errorf("discovery membership unavailable: %w", err)
} Prevention
- Keep client and peer Fabric versions aligned
- Enable TLS verification to detect tampered responses
- Retry discovery against alternate peers
- Monitor peer gossip membership health
When it happens
Trigger: Calling discovery client SendRequest with a PeerMembershipQuery (NetworkPeerQuery/ChannelPeers) where a returned peer's MembershipInfo envelope is nil, truncated, or not a GossipMessage of type AliveMessage.
Common situations: Fabric peer (discovery server) and SDK/CLI (discovery client) version mismatch producing incompatible gossip proto definitions; corrupted discovery response over the wire; a compromised or misbehaving peer returning junk payloads.
Understand the failure class
Background: "cannot parse invalid wire-format data", "cannot unmarshal", "failed unmarshalling": protobuf unmarshal errors explained — this error's family across 10 libraries.
Related errors
- failed unmarshalling stateInfo message
- error unmarshalling
- error unmarshalling original config
- error unmarshalling updated config
- failed to unmarshal ApplicationPolicy bytes
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/7f4d4dc58330b543.
Report an issue: GitHub.