mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
We have seen users unintentionally use RF=1 or RF=2 for a keyspace. We would like to have an option for a minimal RF that is allowed. Cassandra recently added, in Cassandra 4.1 (see apache/cassandra@5fdadb2 and https://issues.apache.org/jira/browse/CASSANDRA-14557), exactly such a option, called "minimum_keyspace_rf" - so we chose to use the same option name in Scylla too. This means that unlike the previous "safe mode" options, the name of this option doesn't start with "restrict_". The value of the minimum_keyspace_rf option is a number, and lower replication factors are rejected with an error like: cqlsh> CREATE KEYSPACE x WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor': 2 }; ConfigurationException: Replication factor replication_factor=2 is forbidden by the current configuration setting of minimum_keyspace_rf=3. Please increase replication factor, or lower minimum_keyspace_rf set in the configuration. This restriction applies to both CREATE KEYSPACE and ALTER KEYSPACE operations. It applies to both SimpleStrategy and NetworkTopologyStrategy, for all DCs or a specific DC. However, a replication factor of zero (0) is *not* forbidden - this is the way to explicitly request not to replicate (at all, or in a specific DC). For the time being, minimum_keyspace_rf=0 is still the default, which means that any replication factor is allowed, as before. We can easily change this default in a followup patch. Note that in the current implementation, trying to use RF below minimum_keyspace_rf is always an error - we don't have a syntax to make into just a warning. In any case the error message explains exactly which configuration option is responsible for this restriction. Fixes #8891. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Closes #9830