apache/cassandra · critical · ConfigurationException
If rpc_address is set to a wildcard address (
Error message
If rpc_address is set to a wildcard address (
What it means
When broadcast_rpc_address is not set and rpc_address is the wildcard 0.0.0.0, Cassandra cannot compute a client-facing RPC address, so applyAddressConfig throws this ConfigurationException at startup. A wildcard rpc_address is only valid when an explicit non-wildcard broadcast_rpc_address advertises the node to clients.
Solutions
- Add a broadcast_rpc_address set to this node's routable IP/hostname
- Or set rpc_address to the specific interface IP instead of 0.0.0.0
- Keep rpc_address: 0.0.0.0 only when every node also has an explicit non-wildcard broadcast_rpc_address
Example fix
// cassandra.yaml before rpc_address: 0.0.0.0 // after rpc_address: 0.0.0.0 broadcast_rpc_address: 10.0.1.5
Defensive patterns
Strategy: validation
Validate before calling
String rpc = config.rpc_address;
if ((rpc == null || "0.0.0.0".equals(rpc) || "::".equals(rpc)) && config.broadcast_rpc_address == null) {
throw new IllegalStateException("rpc_address is wildcard; broadcast_rpc_address must be set");
} Try / catch
try { DatabaseDescriptor.daemonInitialization(); } catch (ConfigurationException e) { /* correct cassandra.yaml */ } Prevention
- Rule: wildcard rpc_address implies mandatory broadcast_rpc_address
- Default per-node configs to explicit interface IPs
- Add this check to config-validation CI for cassandra.yaml
When it happens
Trigger: cassandra.yaml contains rpc_address: 0.0.0.0 (the default example) with no broadcast_rpc_address defined; DatabaseDescriptor.loadConfig() runs during startup.
Common situations: Fresh installs where operators set rpc_address to 0.0.0.0 to listen on all interfaces but forget the companion broadcast_rpc_address; config generators templating bind addresses only.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- broadcast_address cannot be a wildcard address (
- broadcast_rpc_address cannot be a wildcard address (
- listen_address cannot be a wildcard address (
- A maximum number of tokens per node is supported
- accord.cache_size option was set incorrectly to
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/e8b25b0f5f775695.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:1587
/* RPC address to broadcast */
if (config.broadcast_rpc_address != null)
{
try
{
broadcastRpcAddress = InetAddress.getByName(config.broadcast_rpc_address);
}
catch (UnknownHostException e)
{
throw new ConfigurationException("Unknown broadcast_rpc_address '" + config.broadcast_rpc_address + '\'', false);
}
if (broadcastRpcAddress.isAnyLocalAddress())
throw new ConfigurationException("broadcast_rpc_address cannot be a wildcard address (" + config.broadcast_rpc_address + ")!", false);
}
else
{
if (rpcAddress.isAnyLocalAddress())
throw new ConfigurationException("If rpc_address is set to a wildcard address (" + config.rpc_address + "), then " +
"you must set broadcast_rpc_address to a value other than " + config.rpc_address, false);
}
}
public static void applyEncryptionContext()
{
// always attempt to load the cipher factory, as we could be in the situation where the user has disabled encryption,
// but has existing commitlogs and sstables on disk that are still encrypted (and still need to be read)
encryptionContext = new EncryptionContext(conf.transparent_data_encryption_options);
}
public static void applySslContext()
{
if (TEST_JVM_DTEST_DISABLE_SSL.getBoolean())
return;
try
{View on GitHub (pinned to 88fd0f6a0e)