Github user bdeggleston commented on a diff in the pull request:
https://github.com/apache/cassandra/pull/224#discussion_r188782694
--- Diff:
src/java/org/apache/cassandra/cql3/statements/AlterKeyspaceStatement.java ---
@@ -96,7 +98,35 @@ private void warnIfIncreasingRF(KeyspaceMetadata ksm,
KeyspaceParams params)
StorageService.instance.getTokenMetadata(),
DatabaseDescriptor.getEndpointSnitch(),
params.replication.options);
- if (newStrategy.getReplicationFactor() >
oldStrategy.getReplicationFactor())
+
+ validateTransientReplication(oldStrategy, newStrategy);
+ warnIfIncreasingRF(oldStrategy, newStrategy);
+ }
+
+ private void validateTransientReplication(AbstractReplicationStrategy
oldStrategy, AbstractReplicationStrategy newStrategy)
+ {
+ if (oldStrategy.getReplicationFactor().trans == 0 &&
newStrategy.getReplicationFactor().trans > 0)
+ {
+ Keyspace ks = Keyspace.open(keyspace());
+ for (ColumnFamilyStore cfs: ks.getColumnFamilyStores())
+ {
+ if (cfs.viewManager.hasViews())
+ {
+ throw new ConfigurationException("Cannot use transient
replication on keyspaces using materialized views");
+ }
+
+ if (cfs.indexManager.hasIndexes())
+ {
+ throw new ConfigurationException("Cannot use transient
replication on keyspaces using secondary indexes");
+ }
+ }
+
+ }
+ }
+
+ private void warnIfIncreasingRF(AbstractReplicationStrategy
oldStrategy, AbstractReplicationStrategy newStrategy)
+ {
+ if (newStrategy.getReplicationFactor().full >
oldStrategy.getReplicationFactor().full)
--- End diff --
I think full is what we want here. Increasing the number of full replicas
would require a repair. If the total rf is increased, but the number of full
replicas doesn't change, then you're just adding transient replicas, which
shouldn't require a repair or any other operator action.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]