Updated Branches:
refs/heads/trunk bd4812874 -> 3d93a3c90
Merge branch 'cassandra-1.2' into trunk
Conflicts:
src/java/org/apache/cassandra/cql/CFPropDefs.java
src/java/org/apache/cassandra/db/Table.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3d93a3c9
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3d93a3c9
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3d93a3c9
Branch: refs/heads/trunk
Commit: 3d93a3c90c9dd9f970d2be24081e314e06fbed67
Parents: bd48128 c315745
Author: Sylvain Lebresne <[email protected]>
Authored: Tue Mar 5 12:03:22 2013 +0100
Committer: Sylvain Lebresne <[email protected]>
Committed: Tue Mar 5 12:03:22 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 2 +
NEWS.txt | 10 ++
.../org/apache/cassandra/config/KSMetaData.java | 2 +-
.../cql3/statements/AlterKeyspaceStatement.java | 14 ++-
.../cql3/statements/CreateKeyspaceStatement.java | 14 ++-
src/java/org/apache/cassandra/db/DefsTable.java | 14 +--
src/java/org/apache/cassandra/db/Table.java | 11 +--
.../locator/AbstractReplicationStrategy.java | 73 +++++++++++---
.../apache/cassandra/locator/LocalStrategy.java | 7 +-
.../cassandra/locator/NetworkTopologyStrategy.java | 8 ++
.../locator/OldNetworkTopologyStrategy.java | 7 ++
.../apache/cassandra/locator/SimpleStrategy.java | 9 ++-
.../apache/cassandra/thrift/CassandraServer.java | 7 --
.../ReplicationStrategyEndpointCacheTest.java | 2 +-
14 files changed, 120 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/NEWS.txt
----------------------------------------------------------------------
diff --cc NEWS.txt
index 01db820,01db820..b68a5f4
--- a/NEWS.txt
+++ b/NEWS.txt
@@@ -8,6 -8,6 +8,16 @@@ upgrade, just in case you need to roll
(Cassandra version X + 1 will always be able to read data files created
by version X, but the inverse is not necessarily the case.)
++2.0.0
++=====
++
++Upgrading
++---------
++ - Replication and strategy options do not accept unknown options anymore.
++ This was already the case for CQL3 in 1.2 but this is now the case for
++ thrift to.
++
++
1.2.3
=====
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/config/KSMetaData.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/config/KSMetaData.java
index 5229dcf,138e24b..e6cb0bc
--- a/src/java/org/apache/cassandra/config/KSMetaData.java
+++ b/src/java/org/apache/cassandra/config/KSMetaData.java
@@@ -206,7 -206,7 +206,7 @@@ public final class KSMetaDat
// Attempt to instantiate the ARS, which will throw a ConfigException
if the strategy_options aren't fully formed
TokenMetadata tmd = StorageService.instance.getTokenMetadata();
IEndpointSnitch eps = DatabaseDescriptor.getEndpointSnitch();
- AbstractReplicationStrategy.createReplicationStrategy(name,
strategyClass, tmd, eps, strategyOptions);
-
AbstractReplicationStrategy.validateReplicationStrategyIgnoreUnexpected(name,
strategyClass, tmd, eps, strategyOptions);
++ AbstractReplicationStrategy.validateReplicationStrategy(name,
strategyClass, tmd, eps, strategyOptions);
for (CFMetaData cfm : cfMetaData.values())
cfm.validate();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/cql3/statements/AlterKeyspaceStatement.java
----------------------------------------------------------------------
diff --cc
src/java/org/apache/cassandra/cql3/statements/AlterKeyspaceStatement.java
index 52c422a,ef96997..48b2f99
--- a/src/java/org/apache/cassandra/cql3/statements/AlterKeyspaceStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/AlterKeyspaceStatement.java
@@@ -72,12 -72,14 +72,14 @@@ public class AlterKeyspaceStatement ext
}
else if (attrs.getReplicationStrategyClass() != null)
{
- // trial run to let ARS validate class + per-class options
- AbstractReplicationStrategy.createReplicationStrategy(name,
-
AbstractReplicationStrategy.getClass(attrs.getReplicationStrategyClass()),
-
StorageService.instance.getTokenMetadata(),
-
DatabaseDescriptor.getEndpointSnitch(),
-
attrs.getReplicationOptions());
+ // The strategy is validated through KSMetaData.validate() in
announceKeyspaceUpdate below.
+ // However, for backward compatibility with thrift, this doesn't
validate unexpected options yet,
+ // so doing proper validation here.
+ AbstractReplicationStrategy.validateReplicationStrategy(name,
-
attrs.getReplicationStrategyClass(),
++
AbstractReplicationStrategy.getClass(attrs.getReplicationStrategyClass()),
+
StorageService.instance.getTokenMetadata(),
+
DatabaseDescriptor.getEndpointSnitch(),
+
attrs.getReplicationOptions());
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
----------------------------------------------------------------------
diff --cc
src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
index 0a12f97,26e255d..0c4d9ca
--- a/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
@@@ -87,12 -87,14 +87,14 @@@ public class CreateKeyspaceStatement ex
if (attrs.getReplicationStrategyClass() == null)
throw new ConfigurationException("Missing mandatory replication
strategy class");
- // trial run to let ARS validate class + per-class options
- AbstractReplicationStrategy.createReplicationStrategy(name,
-
AbstractReplicationStrategy.getClass(attrs.getReplicationStrategyClass()),
-
StorageService.instance.getTokenMetadata(),
-
DatabaseDescriptor.getEndpointSnitch(),
-
attrs.getReplicationOptions());
+ // The strategy is validated through KSMetaData.validate() in
announceNewKeyspace below.
+ // However, for backward compatibility with thrift, this doesn't
validate unexpected options yet,
+ // so doing proper validation here.
+ AbstractReplicationStrategy.validateReplicationStrategy(name,
-
attrs.getReplicationStrategyClass(),
++
AbstractReplicationStrategy.getClass(attrs.getReplicationStrategyClass()),
+
StorageService.instance.getTokenMetadata(),
+
DatabaseDescriptor.getEndpointSnitch(),
+
attrs.getReplicationOptions());
}
public void announceMigration() throws RequestValidationException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/db/DefsTable.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/db/Table.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/Table.java
index 8675707,3a73f43..7dafa4d
--- a/src/java/org/apache/cassandra/db/Table.java
+++ b/src/java/org/apache/cassandra/db/Table.java
@@@ -258,16 -258,10 +258,9 @@@ public class Tabl
private Table(String table, boolean loadSSTables)
{
- name = table;
- KSMetaData ksm = Schema.instance.getKSMetaData(table);
- assert ksm != null : "Unknown keyspace " + table;
- createReplicationStrategy(ksm);
+ metadata = Schema.instance.getKSMetaData(table);
+ assert metadata != null : "Unknown keyspace " + table;
- try
- {
- createReplicationStrategy(metadata);
- }
- catch (ConfigurationException e)
- {
- throw new RuntimeException(e);
- }
++ createReplicationStrategy(metadata);
indexLocks = new Object[DatabaseDescriptor.getConcurrentWriters() *
128];
for (int i = 0; i < indexLocks.length; i++)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
index 4b54d94,5ebebcd..87099c4
--- a/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
+++ b/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
@@@ -241,10 -248,51 +248,40 @@@ public abstract class AbstractReplicati
TokenMetadata tokenMetadata,
IEndpointSnitch snitch,
Map<String, String> strategyOptions)
- throws ConfigurationException
{
- Class<AbstractReplicationStrategy> c = getClass(strategyClassName);
- return createReplicationStrategy(table, c, tokenMetadata, snitch,
strategyOptions);
+ try
+ {
+ AbstractReplicationStrategy strategy = createInternal(table,
strategyClass, tokenMetadata, snitch, strategyOptions);
+
+ // Because we used to not properly validate unrecognized options,
we only log a warning if we find one.
+ try
+ {
+ strategy.validateExpectedOptions();
+ }
+ catch (ConfigurationException e)
+ {
+ logger.warn("Ignoring {}", e.getMessage());
+ }
+
+ strategy.validateOptions();
+ return strategy;
+ }
+ catch (ConfigurationException e)
+ {
+ // If that happens at this point, there is nothing we can do
about it.
+ throw new RuntimeException();
+ }
+ }
+
+ public static void validateReplicationStrategy(String table,
- String strategyClassName,
++ Class<? extends
AbstractReplicationStrategy> strategyClass,
+ TokenMetadata
tokenMetadata,
+ IEndpointSnitch snitch,
+ Map<String, String>
strategyOptions) throws ConfigurationException
+ {
- AbstractReplicationStrategy strategy = createInternal(table,
getClass(strategyClassName), tokenMetadata, snitch, strategyOptions);
- strategy.validateExpectedOptions();
- strategy.validateOptions();
- }
-
- // For backward compatibility sake on the thrift side
- public static void validateReplicationStrategyIgnoreUnexpected(String
table,
- Class<?
extends AbstractReplicationStrategy> strategyClass,
-
TokenMetadata tokenMetadata,
-
IEndpointSnitch snitch,
-
Map<String, String> strategyOptions) throws ConfigurationException
- {
+ AbstractReplicationStrategy strategy = createInternal(table,
strategyClass, tokenMetadata, snitch, strategyOptions);
++ strategy.validateExpectedOptions();
+ strategy.validateOptions();
}
public static Class<AbstractReplicationStrategy> getClass(String cls)
throws ConfigurationException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3d93a3c9/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------