{"record":{"id":"6d23ff59590f2634","repo":"dgraph-io/dgraph","slug":"unknown-member-v","errorCode":null,"errorMessage":"Unknown member: %+v","messagePattern":"Unknown member: %\\+v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"dgraph/cmd/zero/zero.go","lineNumber":364,"sourceCode":"}\n\nfunc (s *Server) createProposals(dst *pb.Group) ([]*pb.ZeroProposal, error) {\n\tvar res []*pb.ZeroProposal\n\tif len(dst.Members) > 1 {\n\t\treturn res, errors.Errorf(\"Create Proposal: Invalid group: %+v\", dst)\n\t}\n\n\ts.RLock()\n\tdefer s.RUnlock()\n\t// There is only one member. We use for loop because we don't know what the mid is.\n\tfor mid, dstMember := range dst.Members {\n\t\tgroup, has := s.state.Groups[dstMember.GroupId]\n\t\tif !has {\n\t\t\treturn res, errors.Errorf(\"Unknown group for member: %+v\", dstMember)\n\t\t}\n\t\tsrcMember, has := group.Members[mid]\n\t\tif !has {\n\t\t\treturn res, errors.Errorf(\"Unknown member: %+v\", dstMember)\n\t\t}\n\t\tif srcMember.Addr != dstMember.Addr ||\n\t\t\tsrcMember.Leader != dstMember.Leader {\n\n\t\t\tproposal := &pb.ZeroProposal{\n\t\t\t\tMember: dstMember,\n\t\t\t}\n\t\t\tres = append(res, proposal)\n\t\t}\n\t\tif !dstMember.Leader {\n\t\t\t// Don't continue to tablets if request is not from the leader.\n\t\t\treturn res, nil\n\t\t}\n\t\tif dst.SnapshotTs > group.SnapshotTs {\n\t\t\tres = append(res, &pb.ZeroProposal{\n\t\t\t\tSnapshotTs: map[uint32]uint64{dstMember.GroupId: dst.SnapshotTs},\n\t\t\t})\n\t\t}","sourceCodeStart":346,"sourceCodeEnd":382,"githubUrl":"https://github.com/dgraph-io/dgraph/blob/759e242be62c91f8d084da06ad0c8d21256d9c07/dgraph/cmd/zero/zero.go#L346-L382","documentation":"createProposals compares each incoming member with the member Zero has recorded under the same id in the same group. If the member id (mid) is not present in the stored group's Members map, the update references a member Zero does not know, so it rejects with this error.","triggerScenarios":"An Alpha reports membership with a member id that is absent from Zero's recorded members for that group — typically a restarted Alpha with a new raft id, or a member removed from Zero while the Alpha still reports itself.","commonSituations":"Alpha's raft id changed after its p/ directory was wiped but it reuses the old group; member was removed via /removeNode while the Alpha process kept running and keeps heartbeating; split cluster with divergent membership.","solutions":["Restart the Alpha so it re-requests a membership assignment from Zero with a fresh id.","Remove stale member entries via /removeNode and let the Alpha rejoin cleanly.","Wipe the Alpha's p directory if its raft id conflicts, then restart it to join as a new member.","Verify all nodes report to the same Zero leader (check /state) to avoid divergent membership."],"exampleFix":"// before\nalpha.Restart() // reuses old raft id unknown to Zero\n// after\nif memberRemovedFromZero(alpha.NodeId) {\n    alpha.WipeRaftDir() // new id on restart\n    alpha.Restart()\n}","handlingStrategy":"validation","validationCode":"state, _ := fetchZeroState(zeroAddr)\nif _, ok := state.Groups[groupId].Members[nodeId]; !ok {\n    nodeId = rejoinAlphaAndGetNewId()\n}","typeGuard":"func memberKnown(g *pb.Group, mid uint64) bool {\n    _, ok := g.Members[mid]\n    return ok\n}","tryCatchPattern":"_, err := zero.UpdateMembership(ctx, state)\nif err != nil && strings.Contains(err.Error(), \"Unknown member\") {\n    alpha.RestartWithFreshRaftId(ctx)\n}","preventionTips":["After removing a member via /removeNode, restart the Alpha so it re-registers.","Never wipe an Alpha's p directory without expecting a new raft id.","Verify raft ids in /state before scripted membership operations.","Avoid running duplicate Alpha processes against one Zero."],"tags":["zero","membership","raft-id","cluster-administration"],"backgroundTag":"unknown-member","analyzedSha":"759e242be62c91f8d084da06ad0c8d21256d9c07","analyzedAt":"2026-09-01T14:42:12.034Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}