apache/cassandra · warning
ClusterName mismatch from
Error message
ClusterName mismatch from {} {}!={} What it means
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.
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.
Example fix
// before: cassandra.yaml (joining node) cluster_name: 'Test Cluster' // after cluster_name: 'Production Cluster' // must match existing nodes exactly
Defensive patterns
Strategy: validation
Validate before calling
// on the joining node, before start
cqlsh -e "describe cluster" # or read cassandra.yaml
assert config.get("cluster_name").equals(expectedClusterName) : "Fix cluster_name in cassandra.yaml"; Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- broadcast_address cannot be a wildcard address (
- Error while getting seed node list
- Partitioner mismatch from
- Saved cluster name != configured name
- Seeds list is now empty!
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/5f0193a931489f54.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java:57
public static final GossipDigestSynVerbHandler instance = new GossipDigestSynVerbHandler();
private static final Logger logger = LoggerFactory.getLogger(GossipDigestSynVerbHandler.class);
public void doVerb(Message<GossipDigestSyn> message)
{
InetAddressAndPort from = message.from();
logger.trace("Received a GossipDigestSynMessage from {}", from);
if (!Gossiper.instance.isEnabled() && !NewGossiper.instance.isInShadowRound())
{
logger.trace("Ignoring GossipDigestSynMessage because gossip is disabled");
return;
}
GossipDigestSyn gDigestMessage = message.payload;
/* If the message is from a different cluster throw it away. */
if (!gDigestMessage.clusterId.equals(DatabaseDescriptor.getClusterName()))
{
logger.warn("ClusterName mismatch from {} {}!={}", from, gDigestMessage.clusterId, DatabaseDescriptor.getClusterName());
return;
}
if (gDigestMessage.partioner != null && !gDigestMessage.partioner.equals(DatabaseDescriptor.getPartitionerName()))
{
logger.warn("Partitioner mismatch from {} {}!={}", from, gDigestMessage.partioner, DatabaseDescriptor.getPartitionerName());
return;
}
if (gDigestMessage.metadataId != ClusterMetadata.EMPTY_METADATA_IDENTIFIER
&& gDigestMessage.metadataId != ClusterMetadata.current().metadataIdentifier)
{
logger.warn("Cluster metadata identifier mismatch from {} {}!={}", from, gDigestMessage.metadataId, ClusterMetadata.current().metadataIdentifier);
return;
}
List<GossipDigest> gDigestList = gDigestMessage.getGossipDigests();
// if the syn comes from a peer performing a shadow round and this node isView on GitHub (pinned to 88fd0f6a0e)