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