{"record":{"id":"82e192586482fb6e","repo":"aeron-io/aeron","slug":"invalid-cluster-member-id-must-be-an-integer-value","errorCode":null,"errorMessage":"invalid cluster member id, must be an integer value","messagePattern":"invalid cluster member id, must be an integer value","errorType":"validation","errorClass":"ClusterException","httpStatus":null,"severity":"error","filePath":"aeron-cluster/src/main/java/io/aeron/cluster/ClusterMember.java","lineNumber":573,"sourceCode":"\n        for (int i = 0; i < length; i++)\n        {\n            final String idAndEndpoints = memberValues[i];\n            final String[] memberAttributes = idAndEndpoints.split(\",\");\n\n            if (memberAttributes.length < 6 || 8 < memberAttributes.length)\n            {\n                throw new ClusterException(\"invalid member value: \" + idAndEndpoints + \" within: \" + value);\n            }\n\n            final int clusterMemberId;\n            try\n            {\n                clusterMemberId = Integer.parseInt(memberAttributes[0]);\n            }\n            catch (final NumberFormatException ex)\n            {\n                throw new ClusterException(\"invalid cluster member id, must be an integer value\", ex);\n            }\n\n            final String archiveResponseEndpoint = 6 < memberAttributes.length ? memberAttributes[6] : null;\n            final String egressResponseEndpoint = 7 < memberAttributes.length ? memberAttributes[7] : null;\n\n            String endpoints = String.join(\n                \",\",\n                memberAttributes[1],\n                memberAttributes[2],\n                memberAttributes[3],\n                memberAttributes[4],\n                memberAttributes[5]);\n\n            if (null != archiveResponseEndpoint)\n            {\n                endpoints += \",\" + archiveResponseEndpoint;\n            }\n","sourceCodeStart":555,"sourceCodeEnd":591,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-cluster/src/main/java/io/aeron/cluster/ClusterMember.java#L555-L591","documentation":"Within ClusterMember.parse, the first attribute of each member entry must parse as an integer cluster member id. A NumberFormatException is converted into this ClusterException (with the original as cause).","triggerScenarios":"A member entry in the members string starts with a non-integer field (e.g. hostname in place of the id, or a stray comma shifting fields so the id position holds text).","commonSituations":"Config strings like \"node0,host:...\" or a missing id field causing endpoint values to land in the id slot.","solutions":["Ensure each member entry begins with its integer cluster member id","Check for stray/missing commas that shift field positions","Validate the members string format before deployment","Enable a startup config validation that calls ClusterMember.parse early"],"exampleFix":"// before\n\"alpha,localhost:20000,localhost:20001,localhost:20002,localhost:20003,localhost:20004\"\n// after\n\"0,localhost:20000,localhost:20001,localhost:20002,localhost:20003,localhost:20004\"","handlingStrategy":"validation","validationCode":"boolean hasIntegerId(String entry) {\n    String first = entry.split(\",\")[0].trim();\n    try { Integer.parseInt(first); return true; } catch (NumberFormatException e) { return false; }\n}","typeGuard":null,"tryCatchPattern":"try {\n    ClusterMember.parse(membersString);\n} catch (ClusterException e) {\n    if (e.getCause() instanceof NumberFormatException) {\n        log.error(\"member id field is not an integer\", e);\n    }\n}","preventionTips":["Always lead each member entry with its numeric id","Check comma placement so fields don't shift","Unit-test config parsing with the exact production strings"],"tags":["aeron","config","parsing","integer"],"backgroundTag":"invalid-argument-format","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"}