apache/cassandra · critical · RuntimeException
Unable to identify a quorum of CMS members (found %s, requir
Error message
Unable to identify a quorum of CMS members (found %s, required %s). If attemping rediscovery after multiple endpoint changes, check thatseeds have been correctly updated.
What it means
Startup.initializeCMSLookup counts how many CMS candidate endpoints were confirmed (confirmedCMS) and compares against the required quorum. If fewer than quorum endpoints could be confirmed, it throws 'Unable to identify a quorum of CMS members'. The included hint targets rediscovery after multiple endpoint changes: if seeds were not updated to include current CMS members, discovery cannot confirm enough members to proceed.
Source
Thrown at src/java/org/apache/cassandra/tcm/Startup.java:393
if (!builder.hasOverrides())
{
logger.info("No overrides required for CMS members");
return replayed;
}
if (replayed.initCMSLookup(builder.build()))
{
logger.info("Adding CMS lookup log listener");
ClusterMetadataService.instance().log().addListener(new CMSLookup.LogListener());
return replayed;
}
else
throw new RuntimeException("Could not initialize CMS lookup");
}
}
else
{
throw new RuntimeException(String.format("Unable to identify a quorum of CMS members (found %s, required %s). " +
"If attemping rediscovery after multiple endpoint changes, check that" +
"seeds have been correctly updated.",
confirmedCMS.size(), quorum));
}
}
public static void scrubDataDirectories(ClusterMetadata metadata) throws StartupException
{
// clean up debris in the rest of the keyspaces
for (KeyspaceMetadata keyspace : metadata.schema.getKeyspaces())
{
// Skip system as we've already cleaned it
if (keyspace.name.equals(SchemaConstants.SYSTEM_KEYSPACE_NAME) || keyspace.name.equals(SchemaConstants.ACCORD_KEYSPACE_NAME))
continue;
for (TableMetadata cfm : keyspace.tables)
{
ColumnFamilyStore.scrubDataDirectories(cfm);View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Update the seed list (cassandra.yaml / cassandra-rackdc config) to include the current CMS members, then restart.
- Verify which nodes are the live CMS members (from any healthy node: nodetool cms show) and ensure they are up and reachable.
- Bring enough CMS members online to meet quorum (quorum = majority of CMS members).
- If the CMS membership is definitively lost, follow the documented CMS recovery/replacement procedure before restarting this node.
Example fix
// before: seeds point at retired nodes after endpoint changes seeds: - 10.0.0.1:7000 # decommissioned // after: seeds include current CMS members seeds: - 10.0.0.11:7000 # current CMS member - 10.0.0.12:7000 # current CMS member
Defensive patterns
Strategy: validation
Validate before calling
// pre-flight: confirm enough configured endpoints are current CMS members
int confirmed = seeds.stream().filter(CMS::isKnownCmsMember).count();
if (confirmed < quorumSize) throw new ConfigurationException("Update seeds to include current CMS members"); Try / catch
try { Startup.initializeCMSLookup(...); }
catch (RuntimeException e) {
if (e.getMessage().startsWith("Unable to identify a quorum of CMS members")) {
// refresh seeds to current CMS members and restart
} else throw e;
} Prevention
- Update the seed list whenever CMS membership changes
- Run a majority of CMS members across failure domains
- Automate seed-list refresh after CMS migrations
- Verify seeds resolve and are reachable before restart
When it happens
Trigger: initializeCMSLookup confirmed fewer confirmedCMS.size() members than quorum; seeds/endpoint list excludes actual CMS members after topology changes; CMS members are down or unreachable so confirmation fails.
Common situations: Cluster whose CMS moved but cassandra.yaml seeds still list retired nodes; multiple endpoint changes during migration leaving stale seeds; partial outage of CMS members so quorum cannot be met; rediscovery after a rolling replacement.
Understand the failure class
Background: ECONNREFUSED and "connection refused" / "could not connect to server" errors: what they mean and how to fix them — this error's family across 44 libraries.
Related errors
- Found no candidates during initialization. Check if the seed
- Node %s is not a CMS member in epoch %s; members=%s
- %s is already joining the CMS
- %s has already fully joined the CMS
- %s is not currently joining the CMS
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/6df88b62ee785b4f.
Report an issue: GitHub.