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
- Verify all requested endpoints are current, live cluster members (nodetool status) and have joined Accord.
- Update the repair request/automation to use the replaced node's current address instead of a decommissioned one.
- Ensure AccordService is fully started (topology synced) before initiating repair.
- 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
- Resolve current live endpoints via nodetool status instead of cached host lists.
- Wait for AccordService to be fully started before repairs.
- Purge decommissioned/replaced hosts from repair automation.
- Handle IP changes (DHCP/DNS) with stable broadcast addresses.
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
- Cannot return topology when accord.enabled = false in…
- Cannot run accord only repair on
- Cannot run accord only repair on
- Nothing to repair for
- Specified hosts do not share range needed for repair…
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)