aeron-io/aeron · error · ClusterException

invalid member value

Error message

invalid member value: ${idAndEndpoints} within: ${value}

What it means

ClusterMember.parse splits a comma-separated member list string (e.g. used in aeron.cluster.members) and requires each member to have between 6 and 8 comma-separated attributes (memberId plus endpoints). Malformed members are rejected with this exception.

Solutions

  1. Ensure each member has 6-8 comma-separated fields: id,client-facing,member,log,archive,replication[,catchup][,egress]
  2. Count the commas in each member entry; fix missing/extra commas
  3. Generate the members string programmatically from a template to avoid typos
  4. Validate config with ClusterMember.parse in a startup self-check

Example fix

// before
"0,localhost:20000,localhost:20001,localhost:20002,localhost:20003,localhost:20004,localhost:20005,localhost:20006,localhost:20007" // 9 fields
// after
"0,localhost:20000,localhost:20001,localhost:20002,localhost:20003,localhost:20004,localhost:20005,localhost:20006" // 8 fields
Defensive patterns

Strategy: validation

Validate before calling

boolean isValidMemberEntry(String entry) {
    int n = entry.split(",").length;
    return n >= 6 && n <= 8;
}

Try / catch

try {
    ClusterMember.parse(membersString);
} catch (ClusterException e) {
    log.error("bad aeron.cluster.members value: " + membersString, e);
}

Prevention

When it happens

Trigger: Passing a member specification string to ClusterMember.parse where some member entry has fewer than 6 or more than 8 comma-separated fields, e.g. missing an endpoint.

Common situations: Hand-edited aeron.cluster.members config with a dropped or extra comma, missing catchup/transfer endpoints, or whitespace/format typos in cluster deployment tooling.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of aeron-io/aeron@6d60124e15 (2026-09-12). Data as JSON: /api/errors/4058712f2f8a263c. Report an issue: GitHub.

Appendix: source

Thrown at aeron-cluster/src/main/java/io/aeron/cluster/ClusterMember.java:563

    public static ClusterMember[] parse(final String value)
    {
        if (null == value || value.isEmpty())
        {
            return ClusterMember.EMPTY_MEMBERS;
        }

        final String[] memberValues = value.split("\\|");
        final int length = memberValues.length;
        final ClusterMember[] members = new ClusterMember[length];

        for (int i = 0; i < length; i++)
        {
            final String idAndEndpoints = memberValues[i];
            final String[] memberAttributes = idAndEndpoints.split(",");

            if (memberAttributes.length < 6 || 8 < memberAttributes.length)
            {
                throw new ClusterException("invalid member value: " + idAndEndpoints + " within: " + value);
            }

            final int clusterMemberId;
            try
            {
                clusterMemberId = Integer.parseInt(memberAttributes[0]);
            }
            catch (final NumberFormatException ex)
            {
                throw new ClusterException("invalid cluster member id, must be an integer value", ex);
            }

            final String archiveResponseEndpoint = 6 < memberAttributes.length ? memberAttributes[6] : null;
            final String egressResponseEndpoint = 7 < memberAttributes.length ? memberAttributes[7] : null;

            String endpoints = String.join(
                ",",
                memberAttributes[1],

View on GitHub (pinned to 6d60124e15)