apache/cassandra · warning
Got no response for shadow round
Error message
Got no response for shadow round
What it means
NewGossiper's shadow round asks existing cluster members for gossip state to bootstrap initial cluster metadata. If the shadow round request times out or fails repeatedly and maxTries is exhausted, it warns for each failed attempt and then falls back to constructing metadata from system tables (local disk), marking the handler done so live gossip proceeds.
Source
Thrown at src/java/org/apache/cassandra/gms/NewGossiper.java:88
return GossipHelper.storedEpstate();
ShadowRoundHandler shadowRoundHandler = new ShadowRoundHandler(peers);
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;View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Verify seeds are reachable: check cassandra.yaml seeds, ping/telnet seed host on the gossip port (default 7000).
- Fix firewall/security-group rules to allow gossip traffic from the new node to seeds.
- Retry startup once the cluster/seeds are up; the fallback to system tables may leave stale ring data.
- If this is a fresh first node, ensure it is its own seed so no shadow round against others is needed.
Example fix
// before telnet 10.0.0.1 7000 # connection refused — seed down/firewalled // after # fix security group to allow 7000/tcp, correct seeds in cassandra.yaml, restart seed_provider: - seeds: "10.0.0.1,10.0.0.2"
Defensive patterns
Strategy: retry
Validate before calling
// before starting the node
for (String seed : seeds) { Socket s = new Socket(); try { s.connect(new InetSocketAddress(seed, 7000), 3000); s.close(); } catch (IOException e) { throw new IllegalStateException("Seed unreachable: " + seed); } } Try / catch
try { shadowRound.doShadowRound().get(timeoutMs, MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { /* retry up to maxTries, then fall back to system tables */ } Prevention
- Open gossip port (7000) between new nodes and all seeds in firewalls/security groups.
- Keep seed lists accurate and seeds highly available.
- For the first node in a new cluster, make it its own seed.
- Re-run bootstrap after transient startup failures rather than trusting stale system-table fallback.
When it happens
Trigger: doShadowRound's future does not complete within the timeout for maxTries consecutive attempts (InterruptedException/ExecutionException/TimeoutException), typically when no configured seeds are reachable.
Common situations: Bootstrapping a node when all seed hosts are down or firewalled (gossip port 7000 blocked); wrong seed list in cassandra.yaml; starting a node while the entire cluster is down; network partition during startup.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- Unknown broadcast_address '
- broadcast_address cannot be a wildcard address (
- Configured ${configName} "${intf}" could not be found
- Configured ${configName} "${intf}" was found, but had no add
- Configured ${configName} "${intf}" caused an exception
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/b2856813bded4826.
Report an issue: GitHub.