apache/cassandra · error · ConfigurationException

default_keyspace_rf (%d) cannot be less than minimum_replica

Error message

default_keyspace_rf (%d) cannot be less than minimum_replication_factor_fail_threshold (%d)

What it means

DatabaseDescriptor requires default_keyspace_rf (default replication factor for new keyspaces) to be at least the minimum_replication_factor_fail_threshold. The throw fires when default_keyspace_rf is set below that fail threshold, an inconsistent pair that would make default keyspaces immediately fail RF validation.

Source

Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:1231

                throw new ConfigurationException("internode_max_message_size must no exceed internode_application_send_queue_reserve_endpoint_capacity", false);

            if (maxMessageSize > conf.internode_application_send_queue_reserve_global_capacity.toBytes())
                throw new ConfigurationException("internode_max_message_size must no exceed internode_application_send_queue_reserve_global_capacity", false);
        }
        else
        {
            long maxMessageSizeInBytes =
            Math.min(conf.internode_application_receive_queue_reserve_endpoint_capacity.toBytes(),
                     conf.internode_application_send_queue_reserve_endpoint_capacity.toBytes());

            conf.internode_max_message_size = new DataStorageSpec.IntBytesBound(maxMessageSizeInBytes);
        }

        validateMaxConcurrentAutoUpgradeTasksConf(conf.max_concurrent_automatic_sstable_upgrades);

        if (conf.default_keyspace_rf < conf.minimum_replication_factor_fail_threshold)
        {
            throw new ConfigurationException(String.format("default_keyspace_rf (%d) cannot be less than minimum_replication_factor_fail_threshold (%d)",
                                                           conf.default_keyspace_rf, conf.minimum_replication_factor_fail_threshold));
        }

        if (conf.paxos_repair_parallelism <= 0)
            conf.paxos_repair_parallelism = Math.max(1, conf.concurrent_writes / 8);

        Paxos.setPaxosVariant(conf.paxos_variant);
        if (conf.paxos_state_purging == null)
            conf.paxos_state_purging = PaxosStatePurging.legacy;

        logInitializationOutcome(logger);

        if (conf.max_space_usable_for_compactions_in_percentage < 0 || conf.max_space_usable_for_compactions_in_percentage > 1)
            throw new ConfigurationException("max_space_usable_for_compactions_in_percentage must be between 0 and 1", false);

        if (conf.dump_heap_on_uncaught_exception && DatabaseDescriptor.getHeapDumpPath() == null)
            throw new ConfigurationException(String.format("Invalid configuration. Heap dump is enabled but cannot create heap dump output path: %s.", conf.heap_dump_path != null ? conf.heap_dump_path : "null"));

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Raise default_keyspace_rf in cassandra.yaml so it is >= minimum_replication_factor_fail_threshold
  2. Lower minimum_replication_factor_fail_threshold to at most default_keyspace_rf

Example fix

// before (cassandra.yaml)
default_keyspace_rf: 2
minimum_replication_factor_fail_threshold: 3
// after
default_keyspace_rf: 3
minimum_replication_factor_fail_threshold: 3
Defensive patterns

Strategy: validation

Validate before calling

if (conf.default_keyspace_rf < conf.minimum_replication_factor_fail_threshold) throw new IllegalArgumentException("default_keyspace_rf must be >= minimum_replication_factor_fail_threshold");

Try / catch

try { DatabaseDescriptor.applyAll(config); } catch (ConfigurationException e) { log.error("Inconsistent RF settings", e); }

Prevention

When it happens

Trigger: applySimpleConfig (via toolInitialization/applyAll) with conf.default_keyspace_rf < conf.minimum_replication_factor_fail_threshold in cassandra.yaml.

Common situations: Operator raises minimum_replication_factor_fail_threshold for safety without checking default_keyspace_rf; setting a low default RF while enforcing a strict minimum RF policy.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/cf50212555216adc. Report an issue: GitHub.