{"record":{"id":"5f0193a931489f54","repo":"apache/cassandra","slug":"clustername-mismatch-from","errorCode":null,"errorMessage":"ClusterName mismatch from {} {}!={}","messagePattern":"ClusterName mismatch from (.+?) (.+?)!=(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java","lineNumber":57,"sourceCode":"    public static final GossipDigestSynVerbHandler instance = new GossipDigestSynVerbHandler();\n\n    private static final Logger logger = LoggerFactory.getLogger(GossipDigestSynVerbHandler.class);\n\n    public void doVerb(Message<GossipDigestSyn> message)\n    {\n        InetAddressAndPort from = message.from();\n        logger.trace(\"Received a GossipDigestSynMessage from {}\", from);\n        if (!Gossiper.instance.isEnabled() && !NewGossiper.instance.isInShadowRound())\n        {\n            logger.trace(\"Ignoring GossipDigestSynMessage because gossip is disabled\");\n            return;\n        }\n\n        GossipDigestSyn gDigestMessage = message.payload;\n        /* If the message is from a different cluster throw it away. */\n        if (!gDigestMessage.clusterId.equals(DatabaseDescriptor.getClusterName()))\n        {\n            logger.warn(\"ClusterName mismatch from {} {}!={}\", from, gDigestMessage.clusterId, DatabaseDescriptor.getClusterName());\n            return;\n        }\n\n        if (gDigestMessage.partioner != null && !gDigestMessage.partioner.equals(DatabaseDescriptor.getPartitionerName()))\n        {\n            logger.warn(\"Partitioner mismatch from {} {}!={}\", from, gDigestMessage.partioner, DatabaseDescriptor.getPartitionerName());\n            return;\n        }\n\n        if (gDigestMessage.metadataId != ClusterMetadata.EMPTY_METADATA_IDENTIFIER\n            && gDigestMessage.metadataId != ClusterMetadata.current().metadataIdentifier)\n        {\n            logger.warn(\"Cluster metadata identifier mismatch from {} {}!={}\", from, gDigestMessage.metadataId, ClusterMetadata.current().metadataIdentifier);\n            return;\n        }\n\n        List<GossipDigest> gDigestList = gDigestMessage.getGossipDigests();\n        // if the syn comes from a peer performing a shadow round and this node is","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java#L39-L75","documentation":"A logger.warn (not an exception): GossipDigestSynVerbHandler.doVerb silently drops an incoming gossip SYN message when the sender's cluster name (clusterId carried in GossipDigestSyn) does not match the local DatabaseDescriptor.getClusterName(). This prevents gossip state from ever being exchanged between nodes of different Cassandra clusters.","triggerScenarios":"A node with a mismatched cluster_name in cassandra.yaml sends a gossip SYN to this node; typically during cross-cluster IP reuse, stale node rejoining, or misconfigured cassandra.yaml when expanding/rebuilding a cluster.","commonSituations":"Bringing up a new node with the default cluster name ('Test Cluster') against an existing cluster with a custom name; re-adding a node from a decommissioned cluster with recycled IPs; Docker/Vagrant setups with copied configs.","solutions":["Set cluster_name in the offending node's cassandra.yaml to exactly match the cluster (verify with `nodetool describecluster`).","Restart Cassandra on the misconfigured node so the new cluster name takes effect.","If the node belongs to a different cluster entirely, firewall/separate the networks or remove it from gossip reach.","Check for IP reuse: ensure the old owner of the IP was fully decommissioned before reusing the address."],"exampleFix":"// before: cassandra.yaml (joining node)\ncluster_name: 'Test Cluster'\n// after\ncluster_name: 'Production Cluster'  // must match existing nodes exactly","handlingStrategy":"validation","validationCode":"// on the joining node, before start\ncqlsh -e \"describe cluster\"  # or read cassandra.yaml\nassert config.get(\"cluster_name\").equals(expectedClusterName) : \"Fix cluster_name in cassandra.yaml\";","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Template cassandra.yaml from an existing node of the target cluster.","Never reuse IPs of decommissioned nodes without full cleanup.","Verify cluster_name with `nodetool describecluster` after provisioning.","Alert on 'ClusterName mismatch' warnings — gossip is silently being dropped."],"tags":["gossip","configuration","cluster-name"],"backgroundTag":"cluster-name-mismatch","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}