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
----------------------------------------------------------------------

Reply via email to