apache/cassandra · error · ConfigurationException
Transient replication is disabled. Enable in cassandra.yaml…
Error message
Transient replication is disabled. Enable in cassandra.yaml to use.
What it means
validateReplicationStrategy rejects any strategy whose replication factor includes transient replicas (e.g. '3/1') when transient replication is not enabled via transient_replication_enabled in cassandra.yaml. The error tells you the feature flag is off, so a keyspace with transient replication cannot be created or altered.
Solutions
- Enable transient_replication_enabled: true in cassandra.yaml and restart the cluster (must be enabled on ALL nodes)
- Remove the transient portion from the RF (use '3' instead of '3/1') if transient reads are not needed
- Confirm no other keyspaces use transient RF before toggling the flag
- Note transient replication is experimental; consider a plain RF for production
Example fix
// before (cassandra.yaml) # transient_replication_enabled: false // after transient_replication_enabled: true
Defensive patterns
Strategy: validation
Validate before calling
// Before using a transient RF, check the flag
String rf = "3/1";
if (rf.contains("/") && !Boolean.parseBoolean(config.getString("transient_replication_enabled", "false")))
throw new IllegalArgumentException("Enable transient_replication_enabled in cassandra.yaml first"); Try / catch
try {
session.execute(createKeyspaceWithTransientRf);
} catch (ConfigurationException e) {
logger.error("Transient replication rejected: {}", e.getMessage());
} Prevention
- Enable transient_replication_enabled on every node before creating transient keyspaces
- Only use '/N' RF syntax when the feature flag is set
- Remember transient replication is experimental — test thoroughly
- Document the flag in cluster config runbooks
When it happens
Trigger: CREATE/ALTER KEYSPACE with a replication factor containing a transient portion (e.g. {'class':'SimpleStrategy','replication_factor':'3/1'}) while DatabaseDescriptor.isTransientReplicationEnabled() is false (default).
Common situations: Trying experimental transient replication (CASSANDRA-14459 family) without enabling it in config; copying example keyspaces using '/N' RF syntax onto a cluster with default config.
Related errors
- Transient replication is not supported with vnodes yet
- Amount of transient nodes should be strictly positive, but…
- Async Profiler is not enabled. Enable it by setting
- Auto-repair scheduler is disabled.
- Can only safely increase number of transients one at a time…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/baf0534b9d3a5d0a.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java:332
{
// If the subclass doesn't specify a prepareOptions method, then that means that it
// doesn't want to do anything to the options. So do nothing on reflection related exceptions.
}
}
public static void validateReplicationStrategy(String keyspaceName,
Class<? extends AbstractReplicationStrategy> strategyClass,
ClusterMetadata metadata,
Map<String, String> strategyOptions,
ClientState state) throws ConfigurationException
{
AbstractReplicationStrategy strategy = createInternal(keyspaceName, strategyClass, strategyOptions);
strategy.validateExpectedOptions(metadata);
strategy.validateOptions();
strategy.maybeWarnOnOptions(state);
if (strategy.hasTransientReplicas() && !DatabaseDescriptor.isTransientReplicationEnabled())
{
throw new ConfigurationException("Transient replication is disabled. Enable in cassandra.yaml to use.");
}
}
public static Class<AbstractReplicationStrategy> getClass(String cls) throws ConfigurationException
{
String className = cls.contains(".") ? cls : "org.apache.cassandra.locator." + cls;
if ("org.apache.cassandra.locator.OldNetworkTopologyStrategy".equals(className)) // see CASSANDRA-16301
throw new ConfigurationException("The support for the OldNetworkTopologyStrategy has been removed in C* version 4.0. The keyspace strategy should be switch to NetworkTopologyStrategy");
@SuppressWarnings("unchecked")
Class<AbstractReplicationStrategy> strategyClass =
(Class<AbstractReplicationStrategy>) FBUtilities.classForNameWithoutInitialization(className,
"replication strategy",
AbstractReplicationStrategy.class);
return strategyClass;
}
View on GitHub (pinned to 88fd0f6a0e)