Ending up with a keyspace of RF=1 is unfortunately pretty easy in C* right now - the system_auth table for example is created with RF=1 (to take into account single node setups afaict from
CASSANDRA-5112), and a user can further create a keyspace with RF=1 posing availability and streaming risks (e.g. rebuild).
I propose we add two configuration options in cassandra.yaml:
- default_keyspace_rf (default: 1) - If replication factors are not specified, use this number.
- required_minimum_keyspace_rf (default: unset) - Prevent users from creating a keyspace with an RF less than what is configured
These settings could further be re-used to:
- Provide defaults for new keyspaces created with SimpleStrategy or NetworkTopologyStrategy (
- Make the automatic token allocation algorithm interface more intuitive allowing easy use of the new token allocation algorithm.
At the end of the day, if someone really wants to allow RF=1, they simply don’t set the setting. For backwards compatibility the default remains 1 and C* would create with RF=1, and would default to current behavior of allowing any RF on keyspaces.