{"record":{"id":"4bf853b5c615f0a5","repo":"aeron-io/aeron","slug":"memberid-memberid-not-found-in-clustermembers","errorCode":null,"errorMessage":"memberId=${memberId} not found in clusterMembers","messagePattern":"memberId=(.+?) not found in clusterMembers","errorType":"validation","errorClass":"ClusterException","httpStatus":null,"severity":"error","filePath":"aeron-cluster/src/main/java/io/aeron/cluster/ClusterMember.java","lineNumber":1059,"sourceCode":"     * @param clusterMembers  for the current cluster which can be null.\n     * @param memberId        for this member.\n     * @param memberEndpoints for this member.\n     * @return the {@link ClusterMember} determined.\n     */\n    public static ClusterMember determineMember(\n        final ClusterMember[] clusterMembers, final int memberId, final String memberEndpoints)\n    {\n        ClusterMember member = NULL_VALUE != memberId ? ClusterMember.findMember(clusterMembers, memberId) : null;\n\n        if ((null == clusterMembers || 0 == clusterMembers.length) && null == member)\n        {\n            member = ClusterMember.parseEndpoints(NULL_VALUE, memberEndpoints);\n        }\n        else\n        {\n            if (null == member)\n            {\n                throw new ClusterException(\"memberId=\" + memberId + \" not found in clusterMembers\");\n            }\n\n            if (!memberEndpoints.isEmpty())\n            {\n                ClusterMember.validateMemberEndpoints(member, memberEndpoints);\n            }\n        }\n\n        return member;\n    }\n\n    /**\n     * Check the member with the memberEndpoints.\n     *\n     * @param member          to check memberEndpoints against.\n     * @param memberEndpoints to check member against.\n     * @see ConsensusModule.Context#memberEndpoints()\n     * @see ConsensusModule.Context#clusterMembers()","sourceCodeStart":1041,"sourceCodeEnd":1077,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-cluster/src/main/java/io/aeron/cluster/ClusterMember.java#L1041-L1077","documentation":"This constructor path builds/updates a ClusterMember from a memberId and memberEndpoints; when memberId is not NULL_VALUE it must exist in the provided clusterMembers list. If no member with that id is present, this ClusterException is thrown.","triggerScenarios":"Constructing a ClusterMember via this overload with a memberId that has no matching ClusterMember in the clusterMembers array (and memberId != NULL_VALUE).","commonSituations":"Stale member id after reconfiguring the cluster (ids changed), passing a snapshot/leader memberId from a different cluster topology, or building 'detailed events' style client configs referencing a removed member.","solutions":["Ensure the memberId exists in the clusterMembers array you pass in","Update the member id after any cluster membership change","Pass NULL_VALUE for memberId when not targeting a specific member","Verify cluster membership matches the running cluster via ClusterMembersQuery/control response"],"exampleFix":"// before\nnew ClusterMember(clusterMembers, /*memberId=*/3, endpoints) // member 3 removed\n// after\nnew ClusterMember(clusterMembers, /*memberId=*/0, endpoints) // use a valid id","handlingStrategy":"validation","validationCode":"boolean memberExists(ClusterMember[] members, int memberId) {\n    if (memberId == ClusterMember.NULL_VALUE) return true;\n    for (ClusterMember m : members) { if (m.id() == memberId) return true; }\n    return false;\n}","typeGuard":"ClusterMember findMember(ClusterMember[] members, int id) {\n    for (ClusterMember m : members) { if (m.id() == id) return m; }\n    return null;\n}","tryCatchPattern":"try {\n    ClusterMember m = new ClusterMember(clusterMembers, memberId, endpoints);\n} catch (ClusterException e) {\n    if (e.getMessage().contains(\"not found in clusterMembers\")) {\n        log.error(\"memberId \" + memberId + \" stale; refresh cluster membership\", e);\n    }\n}","preventionTips":["Refresh stored member ids after any cluster reconfiguration","Pass NULL_VALUE when the id is not meant to match a specific member","Re-query live membership from the cluster before referencing member ids"],"tags":["aeron","cluster-members","lookup","config"],"backgroundTag":"entity-not-found","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}