apache/cassandra · warning
Not able to construct initial cluster metadata from gossip,
Error message
Not able to construct initial cluster metadata from gossip, using system tables instead
What it means
During a node's bootstrap/startup, Cassandra attempts a gossip 'shadow round' to learn cluster metadata (endpoints, states) from live peers before loading persisted state. If the shadow round gets no usable responses after maxTries, the node logs this warning and falls back to reading cluster metadata from the local system tables. It is a warning-level fallback, not a hard failure, but it means the node could not confirm cluster state via gossip.
Source
Thrown at src/java/org/apache/cassandra/gms/NewGossiper.java:91
handler = shadowRoundHandler;
int tries = 0;
int maxTries = CassandraRelevantProperties.TCM_SHADOW_ROUND_MAX_ATTEMPTS.getInt();
long timeout = CassandraRelevantProperties.TCM_SHADOW_ROUND_TIMEOUT.getLong();
while (true)
{
try
{
return shadowRoundHandler.doShadowRound().get(timeout, TimeUnit.MILLISECONDS);
}
catch (InterruptedException | ExecutionException | TimeoutException e)
{
if (++tries >= maxTries)
break;
logger.warn("Got no response for shadow round");
}
}
logger.warn("Not able to construct initial cluster metadata from gossip, using system tables instead");
// Mark done here so that future gossip messages don't get routed to the shadow round handler (see
// GossipDigestSynVerbHandler & GossipDigestAckVerbHandler)
handler.markDone();
return GossipHelper.storedEpstate();
}
public boolean isInShadowRound()
{
ShadowRoundHandler srh = handler;
return srh != null && !srh.isDone();
}
void onAck(InetAddressAndPort from, Map<InetAddressAndPort, EndpointState> epStateMap)
{
ShadowRoundHandler srh = handler;
if (srh != null && !srh.isDone())
srh.onAck(from, epStateMap);
}View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Verify seeds are correct and at least one seed node is reachable before starting this node
- Check network/firewall rules so the gossip port is open between nodes
- If it is a full-cluster cold start, start seed nodes first
- If single-node/dev, the fallback to system tables is acceptable and can be ignored
Example fix
// before: starting node with unreachable seed cluster_name: 'MyCluster' seeds: '10.0.0.99:7000' // host down // after seeds: '10.0.0.1:7000,10.0.0.2:7000' // live, reachable seeds
Defensive patterns
Strategy: fallback
Validate before calling
// before startup, verify at least one seed is reachable
for (String seed : seeds) {
try (Socket s = new Socket()) {
s.connect(new InetSocketAddress(host(seed), gossipPort(seed)), 3000);
return true; // at least one seed reachable
} catch (IOException ignored) {}
}
return false; Prevention
- Start seed nodes first in cold starts
- Keep gossip port open across the cluster (security groups, firewalls)
- Validate cassandra.yaml seeds on all nodes
- Monitor 'shadow round' warnings as indicators of partitioning
When it happens
Trigger: Node starts while all other nodes are down or unreachable; firewall/network blocks the gossip port; maxTries exhausted with 'Got no response for shadow round'; single-node cluster starting for the first time.
Common situations: Full cluster cold start where no peer is up yet; misconfigured seeds; network partition or security group blocking port 7000/7001; node restarted in isolation in dev environments.
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
- Configured ${configName} "${intf}" could not be found
- Configured ${configName} "${intf}" was found, but had no add
- Set listen_address OR listen_interface, not both
- Unknown broadcast_address '
- broadcast_address cannot be a wildcard address (
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/068cee2a9e96fb17.
Report an issue: GitHub.