apache/cassandra · error · IllegalStateException

Unknown endpoint: ; cannot map to Accord Node.Id

Error message

Unknown endpoint: ; cannot map to Accord Node.Id

What it means

AccordRepair's constructor maps each repair endpoint (InetAddressAndPort) to an Accord Node.Id via the AccordEndpointMapper. If any endpoint has no mapping (mapper.mappedIdOrNull returns null), it throws IllegalStateException 'Unknown endpoint: <ep>; cannot map to Accord Node.Id'. The node is not known to Accord's topology (not registered/mapped), so the repair cannot include it.

Solutions

  1. Verify all requested endpoints are current, live cluster members (nodetool status) and have joined Accord.
  2. Update the repair request/automation to use the replaced node's current address instead of a decommissioned one.
  3. Ensure AccordService is fully started (topology synced) before initiating repair.
  4. If the mapping is stale, restart or re-sync the Accord service so the endpoint mapper reflects current cluster membership.

Example fix

// before: passing stale endpoint list
new AccordRepair(keyspace, ranges, List.of(oldAddress));
// after: use current live endpoints
new AccordRepair(keyspace, ranges, getLiveEndpoints());
Defensive patterns

Strategy: validation

Validate before calling

AccordEndpointMapper mapper = AccordService.instance().endpointMapper();
for (InetAddressAndPort ep : endpoints) if (mapper.mappedIdOrNull(ep) == null) throw new IllegalArgumentException("endpoint not mapped in Accord: " + ep);

Try / catch

try { new AccordRepair(keyspace, ranges, endpoints); } catch (IllegalStateException e) { LOG.error("Repair endpoint unknown to Accord; refresh membership: {}", e.getMessage()); }

Prevention

When it happens

Trigger: Starting an Accord repair whose requested endpoints include a host that is down, decommissioned, or never registered with Accord — the endpoint mapper has no InetAddressAndPort -> Node.Id entry.

Common situations: Repairing after a node was replaced/decommissioned but the repair request still lists the old address; running repair before the node joined the cluster/Accord service; DNS/IP changes causing endpoint mismatch; clock/timing during bootstrap.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/8c15ecd55419bb60. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/service/accord/repair/AccordRepair.java:98

    private volatile Thread waiting;

    public AccordRepair(SharedContext ctx, ColumnFamilyStore cfs, TimeUUID repairId, String keyspace, Collection<Range<Token>> ranges, SyncRemote syncRemote, List<InetAddressAndPort> endpoints)
    {
        this.ctx = ctx;
        this.cfs = cfs;
        this.repairId = repairId;
        this.syncRemote = syncRemote;
        // TODO (desired): support unsafe configuration where we permit less than a quorum,
        //  but this is challenging to do safely as repair has no concept of participants from earlier epochs
        if (syncRemote != All && endpoints != null)
        {
            including = new ArrayList<>(endpoints.size());
            AccordEndpointMapper mapper = AccordService.instance().endpointMapper();
            for (InetAddressAndPort ep : endpoints)
            {
                Node.Id id = mapper.mappedIdOrNull(ep);
                if (id == null)
                    throw new IllegalStateException("Unknown endpoint: " + ep + "; cannot map to Accord Node.Id");
                including.add(id);
            }
        }
        else including = null;
        this.ranges = AccordTopology.toAccordRanges(keyspace, ranges);
    }

    public Epoch minEpoch()
    {
        return minEpoch;
    }

    public static class AccordRepairResult
    {
        public final Ranges repairedRanges;
        public final long maxHlc;

        public AccordRepairResult(Ranges ranges, long maxHlc)

View on GitHub (pinned to 88fd0f6a0e)