{"record":{"id":"068cee2a9e96fb17","repo":"apache/cassandra","slug":"not-able-to-construct-initial-cluster-metadata-fro","errorCode":null,"errorMessage":"Not able to construct initial cluster metadata from gossip, using system tables instead","messagePattern":"Not able to construct initial cluster metadata from gossip, using system tables instead","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/gms/NewGossiper.java","lineNumber":91,"sourceCode":"        handler = shadowRoundHandler;\n\n        int tries = 0;\n        int maxTries = CassandraRelevantProperties.TCM_SHADOW_ROUND_MAX_ATTEMPTS.getInt();\n        long timeout = CassandraRelevantProperties.TCM_SHADOW_ROUND_TIMEOUT.getLong();\n        while (true)\n        {\n            try\n            {\n                return shadowRoundHandler.doShadowRound().get(timeout, TimeUnit.MILLISECONDS);\n            }\n            catch (InterruptedException | ExecutionException | TimeoutException e)\n            {\n                if (++tries >= maxTries)\n                    break;\n                logger.warn(\"Got no response for shadow round\");\n            }\n        }\n        logger.warn(\"Not able to construct initial cluster metadata from gossip, using system tables instead\");\n        // Mark done here so that future gossip messages don't get routed to the shadow round handler (see\n        // GossipDigestSynVerbHandler & GossipDigestAckVerbHandler)\n        handler.markDone();\n        return GossipHelper.storedEpstate();\n    }\n\n    public boolean isInShadowRound()\n    {\n        ShadowRoundHandler srh = handler;\n        return srh != null && !srh.isDone();\n    }\n\n    void onAck(InetAddressAndPort from, Map<InetAddressAndPort, EndpointState> epStateMap)\n    {\n        ShadowRoundHandler srh = handler;\n        if (srh != null && !srh.isDone())\n            srh.onAck(from, epStateMap);\n    }","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/gms/NewGossiper.java#L73-L109","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before: starting node with unreachable seed\ncluster_name: 'MyCluster'\nseeds: '10.0.0.99:7000'  // host down\n// after\nseeds: '10.0.0.1:7000,10.0.0.2:7000'  // live, reachable seeds","handlingStrategy":"fallback","validationCode":"// before startup, verify at least one seed is reachable\nfor (String seed : seeds) {\n  try (Socket s = new Socket()) {\n    s.connect(new InetSocketAddress(host(seed), gossipPort(seed)), 3000);\n    return true; // at least one seed reachable\n  } catch (IOException ignored) {}\n}\nreturn false;","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["gossip","startup","network","fallback"],"backgroundTag":"connection-refused","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}