You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/10/06 21:37:16 UTC

svn commit: r1005215 - in /cassandra/trunk: ./ src/java/org/apache/cassandra/avro/ src/java/org/apache/cassandra/service/ src/java/org/apache/cassandra/thrift/ test/system/

Author: jbellis
Date: Wed Oct  6 19:37:15 2010
New Revision: 1005215

URL: http://svn.apache.org/viewvc?rev=1005215&view=rev
Log:
allow keyspace creation with RF > N.
patch by jbellis; reviewed by gdusbabek for CASSANDRA-1428

Modified:
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
    cassandra/trunk/test/system/test_avro_system.py
    cassandra/trunk/test/system/test_thrift_server.py

Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Wed Oct  6 19:37:15 2010
@@ -15,6 +15,7 @@ dev
  * deletion support in secondary indexes (CASSANDRA-1571)
  * meaningful error message for invalid replication strategy class 
    (CASSANDRA-1566)
+ * allow keyspace creation with RF > N (CASSANDRA-1428)
 
 
 0.7-beta2

Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Wed Oct  6 19:37:15 2010
@@ -635,11 +635,6 @@ public class CassandraServer implements 
         if (!(DatabaseDescriptor.getAuthenticator() instanceof AllowAllAuthenticator))
             throw newInvalidRequestException("Unable to create new keyspace while authentication is enabled.");
 
-        int totalNodes = Gossiper.instance.getLiveMembers().size() + Gossiper.instance.getUnreachableMembers().size();
-        if (totalNodes < ksDef.replication_factor)
-            throw newInvalidRequestException(String.format("%s live nodes are not enough to support replication factor %s",
-                                                           totalNodes, ksDef.replication_factor));
-
         //generate a meaningful error if the user setup keyspace and/or column definition incorrectly
         for (CfDef cf : ksDef.cf_defs) 
         {
@@ -744,10 +739,6 @@ public class CassandraServer implements 
         if (ks_def.cf_defs != null && ks_def.cf_defs.size() > 0)
             throw newInvalidRequestException("Keyspace update must not contain any column family definitions.");
         
-        int totalNodes = Gossiper.instance.getLiveMembers().size() + Gossiper.instance.getUnreachableMembers().size();
-        if (totalNodes < ks_def.replication_factor)
-            throw newInvalidRequestException(String.format("%s live nodes are not enough to support replication factor %s",
-                                                           totalNodes, ks_def.replication_factor));
         if (DatabaseDescriptor.getTableDefinition(ks_def.name.toString()) == null)
             throw newInvalidRequestException("Keyspace does not exist.");
         

Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Oct  6 19:37:15 2010
@@ -1903,13 +1903,6 @@ public class StorageService implements I
                 if (DatabaseDescriptor.getDefsVersion().timestamp() > 0 || Migration.getLastMigrationId() != null)
                     throw new ConfigurationException("Cannot load from XML on top of pre-existing schemas.");
              
-                // cycle through first to make sure we can satisfy live nodes constraint.
-                int totalNodes = Gossiper.instance.getLiveMembers().size() + Gossiper.instance.getUnreachableMembers().size();
-                for (KSMetaData table : tables)
-                    if (totalNodes < table.replicationFactor)
-                        throw new ConfigurationException(String.format("%s live nodes are not enough to support replication factor %s",
-                                                                       totalNodes, table.replicationFactor));
-                
                 Migration migration = null;
                 for (KSMetaData table : tables)
                 {

Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java Wed Oct  6 19:37:15 2010
@@ -766,11 +766,6 @@ public class CassandraServer implements 
     {
         state().hasKeyspaceListAccess(Permission.WRITE);
         
-        int totalNodes = Gossiper.instance.getLiveMembers().size() + Gossiper.instance.getUnreachableMembers().size();
-        if (totalNodes < ks_def.replication_factor)
-            throw new InvalidRequestException(String.format("%s live nodes are not enough to support replication factor %s",
-                                                            totalNodes, ks_def.replication_factor));
-        
         // generate a meaningful error if the user setup keyspace and/or column definition incorrectly
         for (CfDef cf : ks_def.cf_defs) 
         {
@@ -864,10 +859,6 @@ public class CassandraServer implements 
         if (ks_def.getCf_defs() != null && ks_def.getCf_defs().size() > 0)
             throw new InvalidRequestException("Keyspace update must not contain any column family definitions.");
         
-        int totalNodes = Gossiper.instance.getLiveMembers().size() + Gossiper.instance.getUnreachableMembers().size();
-        if (totalNodes < ks_def.replication_factor)
-            throw new InvalidRequestException(String.format("%s live nodes are not enough to support replication factor %s",
-                                                            totalNodes, ks_def.replication_factor));
         if (DatabaseDescriptor.getTableDefinition(ks_def.name) == null)
             throw new InvalidRequestException("Keyspace does not exist.");
         
@@ -875,7 +866,7 @@ public class CassandraServer implements 
         {
             KSMetaData ksm = new KSMetaData(
                     ks_def.name, 
-                    (Class<? extends AbstractReplicationStrategy>)FBUtilities.<AbstractReplicationStrategy>classForName(ks_def.strategy_class, "keyspace replication strategy"),
+                    FBUtilities.<AbstractReplicationStrategy>classForName(ks_def.strategy_class, "keyspace replication strategy"),
                     ks_def.strategy_options,
                     ks_def.replication_factor);
             applyMigrationOnStage(new UpdateKeyspace(ksm));

Modified: cassandra/trunk/test/system/test_avro_system.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_avro_system.py?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_avro_system.py (original)
+++ cassandra/trunk/test/system/test_avro_system.py Wed Oct  6 19:37:15 2010
@@ -56,19 +56,12 @@ class TestSystemOperations(AvroTester):
         
         self.client.request('set_keyspace', {'keyspace' : 'CreateKeyspace'})
         
-        # modify invalid
+        # modify valid
         modified_keyspace = {'name': 'CreateKeyspace', 
                              'strategy_class': 'org.apache.cassandra.locator.OldNetworkTopologyStrategy',
                              'strategy_options': {}, 
-                             'replication_factor': 2, 
+                             'replication_factor': 1, 
                              'cf_defs': []}
-        avro_utils.assert_raises(AvroRemoteException,
-                self.client.request,
-                'system_update_keyspace',
-                {'ks_def': modified_keyspace})
-        
-        # modify valid
-        modified_keyspace['replication_factor'] = 1
         self.client.request('system_update_keyspace', {'ks_def': modified_keyspace})
         modks = self.client.request('describe_keyspace', {'keyspace': 'CreateKeyspace'})
         assert modks['replication_factor'] == modified_keyspace['replication_factor']

Modified: cassandra/trunk/test/system/test_thrift_server.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_thrift_server.py?rev=1005215&r1=1005214&r2=1005215&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_thrift_server.py (original)
+++ cassandra/trunk/test/system/test_thrift_server.py Wed Oct  6 19:37:15 2010
@@ -1208,9 +1208,8 @@ class TestMutations(ThriftTester):
             client.system_drop_keyspace(keyspace)
     
     def test_system_keyspace_operations(self):
-        """ Test keyspace (add, drop, rename) operations """
-        # create
-        keyspace = KsDef('CreateKeyspace', 'org.apache.cassandra.locator.SimpleStrategy', {}, 1,
+        # create.  note large RF, this is OK
+        keyspace = KsDef('CreateKeyspace', 'org.apache.cassandra.locator.SimpleStrategy', {}, 10,
                          [CfDef('CreateKeyspace', 'CreateKsCf')])
         client.system_add_keyspace(keyspace)
         newks = client.describe_keyspace('CreateKeyspace')
@@ -1218,14 +1217,8 @@ class TestMutations(ThriftTester):
         
         _set_keyspace('CreateKeyspace')
         
-        # modify invlid
-        modified_keyspace = KsDef('CreateKeyspace', 'org.apache.cassandra.locator.OldNetworkTopologyStrategy', {}, 2, [])
-        def fail_too_high_rf():
-            client.system_update_keyspace(modified_keyspace)
-        _expect_exception(fail_too_high_rf, InvalidRequestException)
-        
         # modify valid
-        modified_keyspace.replication_factor = 1
+        modified_keyspace = KsDef('CreateKeyspace', 'org.apache.cassandra.locator.OldNetworkTopologyStrategy', {}, 1, [])
         client.system_update_keyspace(modified_keyspace)
         modks = client.describe_keyspace('CreateKeyspace')
         assert modks.replication_factor == modified_keyspace.replication_factor