Author: gdusbabek
Date: Tue Aug 3 18:35:31 2010
New Revision: 981999
URL: http://svn.apache.org/viewvc?rev=981999&view=rev
Log:
complain if there aren't enough nodes to support requested RF. patch by
gdusbabek, reviewed by jbellis. CASSANDRA-1343
Modified:
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
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=981999&r1=981998&r2=981999&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Tue Aug 3 18:35:31 2010
@@ -1679,8 +1679,16 @@ 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.");
+ Collection<KSMetaData> tables =
DatabaseDescriptor.readTablesFromYaml();
+
+ // cycle through first to make sure we can satisfy live nodes
constraint.
+ int liveNodeCount = getLiveNodes().size();
+ for (KSMetaData table : tables)
+ if (liveNodeCount < table.replicationFactor)
+ throw new ConfigurationException("Not enough live
nodes to support this keyspace: " + table.name);
+
Migration migration = null;
- for (KSMetaData table :
DatabaseDescriptor.readTablesFromYaml())
+ for (KSMetaData table : tables)
{
migration = new AddKeyspace(table);
migration.apply();
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=981999&r1=981998&r2=981999&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
Tue Aug 3 18:35:31 2010
@@ -826,6 +826,9 @@ public class CassandraServer implements
if (!(DatabaseDescriptor.getAuthenticator() instanceof
AllowAllAuthenticator))
throw new InvalidRequestException("Unable to create new keyspace
while authentication is enabled.");
+ if (StorageService.instance.getLiveNodes().size() <
ks_def.replication_factor)
+ throw new InvalidRequestException("Not enough live nodes to
support this keyspace");
+
//generate a meaningful error if the user setup keyspace and/or column
definition incorrectly
for (CfDef cf : ks_def.cf_defs)
{