Author: jbellis
Date: Fri Apr 16 19:23:47 2010
New Revision: 935049

URL: http://svn.apache.org/viewvc?rev=935049&view=rev
Log:
make EndPointSnitch per-cluster instead of per-keyspace, and add better error 
messages for snitch misconfiguration.
patch by jbellis; reviewed by gdusbabek for CASSANDRA-986

Modified:
    cassandra/trunk/conf/cassandra.xml
    cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/dht/BootStrapper.java
    
cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
    
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterSyncWriteResponseHandler.java
    
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
    cassandra/trunk/test/conf/cassandra.xml
    cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java

Modified: cassandra/trunk/conf/cassandra.xml
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/conf/cassandra.xml?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/conf/cassandra.xml (original)
+++ cassandra/trunk/conf/cassandra.xml Fri Apr 16 19:23:47 2010
@@ -46,6 +46,15 @@
   <AutoBootstrap>false</AutoBootstrap>
 
   <!--
+   ~ EndPointSnitch: Setting this to the class that implements
+   ~ AbstractEndpointSnitch, which lets Cassandra know enough
+   ~ about your network topology to route requests efficiently.
+   ~ Out of the box, Cassandra provides 
org.apache.cassandra.locator.EndPointSnitch,
+   ~ and PropertyFileEndPointSnitch is available in contrib/.
+  -->
+  <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
+
+  <!--
    ~ Keyspaces and ColumnFamilies:
    ~ A ColumnFamily is the Cassandra concept closest to a relational
    ~ table.  Keyspaces are separate groups of ColumnFamilies.  Except in
@@ -139,16 +148,6 @@
 
       <!-- Number of replicas of the data -->
       <ReplicationFactor>1</ReplicationFactor>
-
-      <!--
-       ~ EndPointSnitch: Setting this to the class that implements
-       ~ AbstractEndpointSnitch, which lets Cassandra know enough
-       ~ about your network topology to route requests efficiently.
-       ~ Out of the box, Cassandra provides 
org.apache.cassandra.locator.EndPointSnitch,
-       ~ and PropertyFileEndPointSnitch is available in contrib/.
-      -->
-      
<EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
-        
     </Keyspace>
   </Keyspaces>
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
Fri Apr 16 19:23:47 2010
@@ -45,6 +45,7 @@ import javax.xml.transform.TransformerEx
 import javax.xml.xpath.XPathExpressionException;
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 import java.net.InetAddress;
@@ -70,6 +71,7 @@ public class DatabaseDescriptor
 
     public static final String random = "RANDOM";
     public static final String ophf = "OPHF";
+    private static IEndPointSnitch snitch;
     private static int storagePort = 7000;
     private static int rpcPort = 9160;
     private static boolean thriftFramed = false;
@@ -374,6 +376,14 @@ public class DatabaseDescriptor
                 }
             }
 
+            /* end point snitch */
+            String endPointSnitchClassName = 
xmlUtils.getNodeValue("/Storage/EndPointSnitch");
+            if (endPointSnitchClassName == null)
+            {
+                throw new ConfigurationException("Missing endpointsnitch 
directive");
+            }
+            snitch = createEndpointSnitch(endPointSnitchClassName);
+
             /* snapshot-before-compaction.  defaults to false */
             String sbc = 
xmlUtils.getNodeValue("/Storage/SnapshotBeforeCompaction");
             if (sbc != null)
@@ -477,7 +487,7 @@ public class DatabaseDescriptor
                                0,
                                0.01)
             };
-            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE, null, 
-1, null, systemCfDefs);
+            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE, null, 
-1, systemCfDefs);
             tables.put(Table.SYSTEM_TABLE, systemMeta);
                 
             CFMetaData[] definitionCfDefs = new CFMetaData[]
@@ -485,7 +495,7 @@ public class DatabaseDescriptor
                 new CFMetaData(Table.DEFINITIONS, Migration.MIGRATIONS_CF, 
"Standard", new TimeUUIDType(), null, "individual schema mutations", 0, 0),
                 new CFMetaData(Table.DEFINITIONS, Migration.SCHEMA_CF, 
"Standard", new UTF8Type(), null, "current state of the schema", 0, 0)
             };
-            tables.put(Table.DEFINITIONS, new KSMetaData(Table.DEFINITIONS, 
null, -1, null, definitionCfDefs));
+            tables.put(Table.DEFINITIONS, new KSMetaData(Table.DEFINITIONS, 
null, -1, definitionCfDefs));
             
             // NOTE: make sure that all system CFMs defined by now. calling 
fixMaxId at this point will set the base id
             // to a value that leaves room for future system cfms.
@@ -513,7 +523,49 @@ public class DatabaseDescriptor
             throw new RuntimeException(e);
         }
     }
-    
+
+    private static IEndPointSnitch createEndpointSnitch(String 
endPointSnitchClassName) throws ConfigurationException
+    {
+        IEndPointSnitch snitch;
+        Class cls;
+        try
+        {
+            cls = Class.forName(endPointSnitchClassName);
+        }
+        catch (ClassNotFoundException e)
+        {
+            throw new ConfigurationException("Unable to load endpointsnitch 
class " + endPointSnitchClassName);
+        }
+        Constructor ctor;
+        try
+        {
+            ctor = cls.getConstructor();
+        }
+        catch (NoSuchMethodException e)
+        {
+            throw new ConfigurationException("No default constructor found in 
" + endPointSnitchClassName);
+        }
+        try
+        {
+            snitch = (IEndPointSnitch)ctor.newInstance();
+        }
+        catch (InstantiationException e)
+        {
+            throw new ConfigurationException("endpointsnitch class " + 
endPointSnitchClassName + "is abstract");
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new ConfigurationException("Access to " + 
endPointSnitchClassName + " constructor was rejected");
+        }
+        catch (InvocationTargetException e)
+        {
+            if (e.getCause() instanceof ConfigurationException)
+                throw (ConfigurationException)e.getCause();
+            throw new ConfigurationException("Error instantiating " + 
endPointSnitchClassName + " " + e.getMessage());
+        }
+        return snitch;
+    }
+
     public static void loadSchemas() throws IOException
     {
         // we can load tables from local storage if a version is set in the 
system table and that acutally maps to
@@ -624,39 +676,6 @@ public class DatabaseDescriptor
                     replicationFactor = Integer.parseInt(value);
                 }
 
-                /* end point snitch */
-                String endPointSnitchClassName = 
xmlUtils.getNodeValue("/Storage/Keyspaces/keyspa...@name='" + ksName + 
"']/EndPointSnitch");
-                if (endPointSnitchClassName == null)
-                {
-                    throw new ConfigurationException("Missing endpointsnitch 
directive for keyspace " + ksName);
-                }
-                IEndPointSnitch snitch = null;
-                try
-                {
-                    Class cls = Class.forName(endPointSnitchClassName);
-                    snitch = 
(IEndPointSnitch)cls.getConstructor().newInstance();
-                }
-                catch (ClassNotFoundException e)
-                {
-                    throw new ConfigurationException("Invalid endpointsnitch 
class " + endPointSnitchClassName);
-                }
-                catch (NoSuchMethodException e)
-                {
-                    throw new ConfigurationException("Invalid endpointsnitch 
class " + endPointSnitchClassName + " " + e.getMessage());
-                }
-                catch (InstantiationException e)
-                {
-                    throw new ConfigurationException("Invalid endpointsnitch 
class " + endPointSnitchClassName + " " + e.getMessage());
-                }
-                catch (IllegalAccessException e)
-                {
-                    throw new ConfigurationException("Invalid endpointsnitch 
class " + endPointSnitchClassName + " " + e.getMessage());
-                }
-                catch (InvocationTargetException e)
-                {
-                    throw new ConfigurationException("Invalid endpointsnitch 
class " + endPointSnitchClassName + " " + e.getMessage());
-                }
-
                 String xqlTable = "/Storage/Keyspaces/keyspa...@name='" + 
ksName + "']/";
                 NodeList columnFamilies = 
xmlUtils.getRequestedNodeList(xqlTable + "ColumnFamily");
 
@@ -738,7 +757,7 @@ public class DatabaseDescriptor
                     // insert it into the table dictionary.
                     cfDefs[j] = new CFMetaData(tableName, cfName, columnType, 
comparator, subcolumnComparator, comment, rowCacheSize, keyCacheSize, 
readRepairChance);
                 }
-                defs.add(new KSMetaData(ksName, strategyClass, 
replicationFactor, snitch, cfDefs));
+                defs.add(new KSMetaData(ksName, strategyClass, 
replicationFactor, cfDefs));
             }
         }
         catch (XPathExpressionException e)
@@ -853,9 +872,9 @@ public class DatabaseDescriptor
         return partitioner;
     }
     
-    public static IEndPointSnitch getEndPointSnitch(String table)
+    public static IEndPointSnitch getEndPointSnitch()
     {
-        return tables.get(table).snitch;
+        return snitch;
     }
 
     public static Class<? extends AbstractReplicationStrategy> 
getReplicaPlacementStrategyClass(String table)

Modified: cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java Fri 
Apr 16 19:23:47 2010
@@ -39,15 +39,13 @@ public final class KSMetaData
     public final String name;
     public final Class<? extends AbstractReplicationStrategy> strategyClass;
     public final int replicationFactor;
-    public final IEndPointSnitch snitch;
     private final Map<String, CFMetaData> cfMetaData;
 
-    public KSMetaData(String name, Class<? extends 
AbstractReplicationStrategy> strategyClass, int replicationFactor, 
IEndPointSnitch snitch, CFMetaData... cfDefs)
+    public KSMetaData(String name, Class<? extends 
AbstractReplicationStrategy> strategyClass, int replicationFactor, 
CFMetaData... cfDefs)
     {
         this.name = name;
         this.strategyClass = strategyClass;
         this.replicationFactor = replicationFactor;
-        this.snitch = snitch;
         Map<String, CFMetaData> cfmap = new HashMap<String, CFMetaData>();
         for (CFMetaData cfm : cfDefs)
             cfmap.put(cfm.cfName, cfm);
@@ -65,7 +63,7 @@ public final class KSMetaData
                 CFMetaData.purge(oldCf);
             newCfs.add(CFMetaData.renameTable(oldCf, newName));
         }
-        return new KSMetaData(newName, ksm.strategyClass, 
ksm.replicationFactor, ksm.snitch, newCfs.toArray(new 
CFMetaData[newCfs.size()]));
+        return new KSMetaData(newName, ksm.strategyClass, 
ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
     }
     
     public boolean equals(Object obj)
@@ -78,24 +76,10 @@ public final class KSMetaData
         return other.name.equals(name)
                 && ObjectUtils.equals(other.strategyClass, strategyClass)
                 && other.replicationFactor == replicationFactor
-                && sameEpSnitch(other, this)
                 && other.cfMetaData.size() == cfMetaData.size()
                 && other.cfMetaData.equals(cfMetaData);
     }
 
-    // epsnitches generally have no state, so comparing class names is 
sufficient.
-    private static boolean sameEpSnitch(KSMetaData a, KSMetaData b)
-    {
-        if (a.snitch == null && b.snitch == null)
-            return true;
-        else if (a.snitch == null && b.snitch != null)
-            return false;
-        else if (a.snitch != null && b.snitch == null)
-            return false;
-        else
-            return 
a.snitch.getClass().getName().equals(b.snitch.getClass().getName());
-    }
-
     public Map<String, CFMetaData> cfMetaData()
     {
         return cfMetaData;
@@ -110,9 +94,6 @@ public final class KSMetaData
         if (ksm.strategyClass != null)
             dout.writeUTF(ksm.strategyClass.getName());
         dout.writeInt(ksm.replicationFactor);
-        dout.writeBoolean(ksm.snitch != null);
-        if (ksm.snitch != null)
-            dout.writeUTF(ksm.snitch.getClass().getName());
         dout.writeInt(ksm.cfMetaData.size());
         for (CFMetaData cfm : ksm.cfMetaData.values())
             dout.write(CFMetaData.serialize(cfm));
@@ -134,15 +115,6 @@ public final class KSMetaData
             throw new IOException(ex);
         }
         int replicationFactor = din.readInt();
-        IEndPointSnitch epSnitch = null;
-        try
-        {
-            epSnitch = din.readBoolean() ? 
(IEndPointSnitch)Class.forName(din.readUTF()).newInstance() : null;
-        }
-        catch (Exception ex)
-        {
-            throw new IOException(ex);
-        }
         int cfsz = din.readInt();
         CFMetaData[] cfMetaData = new CFMetaData[cfsz];
         for (int i = 0; i < cfsz; i++)
@@ -158,7 +130,6 @@ public final class KSMetaData
             }
         }
 
-        KSMetaData ksm = new KSMetaData(name, repStratClass, 
replicationFactor, epSnitch, cfMetaData);
-        return ksm;
+        return new KSMetaData(name, repStratClass, replicationFactor, 
cfMetaData);
     }
 }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java 
Fri Apr 16 19:23:47 2010
@@ -69,7 +69,7 @@ public class AddColumnFamily extends Mig
     {
         List<CFMetaData> newCfs = new 
ArrayList<CFMetaData>(ksm.cfMetaData().values());
         newCfs.add(cfm);
-        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, ksm.snitch, newCfs.toArray(new 
CFMetaData[newCfs.size()]));
+        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
     }
     
     public void applyModels()

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 Fri Apr 16 19:23:47 2010
@@ -81,7 +81,7 @@ public class DropColumnFamily extends Mi
         List<CFMetaData> newCfs = new 
ArrayList<CFMetaData>(ksm.cfMetaData().values());
         newCfs.remove(cfm);
         assert newCfs.size() == ksm.cfMetaData().size() - 1;
-        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, ksm.snitch, newCfs.toArray(new 
CFMetaData[newCfs.size()]));
+        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
     }
 
     @Override

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
 Fri Apr 16 19:23:47 2010
@@ -91,7 +91,7 @@ public class RenameColumnFamily extends 
         assert newCfs.size() == ksm.cfMetaData().size() - 1;
         CFMetaData newCfm = CFMetaData.rename(oldCfm, newName);
         newCfs.add(newCfm);
-        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, ksm.snitch, newCfs.toArray(new 
CFMetaData[newCfs.size()]));
+        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
     }
 
     @Override

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/BootStrapper.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/BootStrapper.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/BootStrapper.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/BootStrapper.java Fri Apr 
16 19:23:47 2010
@@ -156,7 +156,7 @@ public class BootStrapper
             {
                 if (range.contains(myRange))
                 {
-                    List<InetAddress> preferred = 
DatabaseDescriptor.getEndPointSnitch(table).getSortedListByProximity(address, 
rangeAddresses.get(range));
+                    List<InetAddress> preferred = 
DatabaseDescriptor.getEndPointSnitch().getSortedListByProximity(address, 
rangeAddresses.get(range));
                     myRangeAddresses.putAll(myRange, preferred);
                     break;
                 }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
 Fri Apr 16 19:23:47 2010
@@ -75,11 +75,11 @@ public abstract class AbstractReplicatio
      * as the destination, it is a "hinted" write, and will need to be sent to
      * the ultimate target when it becomes alive again.
      */
-    public Multimap<InetAddress, InetAddress> getHintedEndpoints(String table, 
Collection<InetAddress> targets)
+    public Multimap<InetAddress, InetAddress> 
getHintedEndpoints(Collection<InetAddress> targets)
     {
         Multimap<InetAddress, InetAddress> map = 
HashMultimap.create(targets.size(), 1);
 
-        IEndPointSnitch endPointSnitch = 
DatabaseDescriptor.getEndPointSnitch(table);
+        IEndPointSnitch endPointSnitch = 
DatabaseDescriptor.getEndPointSnitch();
 
         // first, add the live endpoints
         for (InetAddress ep : targets)

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterSyncWriteResponseHandler.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterSyncWriteResponseHandler.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterSyncWriteResponseHandler.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterSyncWriteResponseHandler.java
 Fri Apr 16 19:23:47 2010
@@ -49,7 +49,7 @@ public class DatacenterSyncWriteResponse
         // Response is been managed by the map so make it 1 for the superclass.
         super(1, table);
         this.responseCounts = responseCounts;
-        endPointSnitch = (DatacenterEndPointSnitch) 
DatabaseDescriptor.getEndPointSnitch(table);
+        endPointSnitch = (DatacenterEndPointSnitch) 
DatabaseDescriptor.getEndPointSnitch();
     }
 
     @Override

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java
 Fri Apr 16 19:23:47 2010
@@ -50,7 +50,7 @@ public class DatacenterWriteResponseHand
         // Response is been managed by the map so the waitlist size really 
doesnt matter.
         super(blockFor, table);
         this.blockFor = new AtomicInteger(blockFor);
-        endpointsnitch = (DatacenterEndPointSnitch) 
DatabaseDescriptor.getEndPointSnitch(table);
+        endpointsnitch = (DatacenterEndPointSnitch) 
DatabaseDescriptor.getEndPointSnitch();
         localEndpoint = FBUtilities.getLocalAddress();
     }
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Fri 
Apr 16 19:23:47 2010
@@ -106,7 +106,7 @@ public class StorageProxy implements Sto
                     AbstractReplicationStrategy rs = 
ss.getReplicationStrategy(table);
 
                     List<InetAddress> naturalEndpoints = 
ss.getNaturalEndpoints(table, rm.key());
-                    Multimap<InetAddress,InetAddress> hintedEndpoints = 
rs.getHintedEndpoints(table, naturalEndpoints);
+                    Multimap<InetAddress,InetAddress> hintedEndpoints = 
rs.getHintedEndpoints(naturalEndpoints);
                     Message unhintedMessage = null; // lazy initialize for 
non-local, unhinted writes
 
                     // 3 cases:
@@ -195,7 +195,7 @@ public class StorageProxy implements Sto
 
                 List<InetAddress> naturalEndpoints = 
ss.getNaturalEndpoints(table, rm.key());
                 Collection<InetAddress> writeEndpoints = 
rs.getWriteEndpoints(StorageService.getPartitioner().getToken(rm.key()), table, 
naturalEndpoints);
-                Multimap<InetAddress, InetAddress> hintedEndpoints = 
rs.getHintedEndpoints(table, writeEndpoints);
+                Multimap<InetAddress, InetAddress> hintedEndpoints = 
rs.getHintedEndpoints(writeEndpoints);
                 int blockFor = determineBlockFor(writeEndpoints.size(), 
consistency_level);
 
                 // avoid starting a write we know can't achieve the required 
consistency
@@ -675,7 +675,7 @@ public class StorageProxy implements Sto
             if (endpoints.size() < responseCount)
                 throw new UnavailableException();
 
-            
DatabaseDescriptor.getEndPointSnitch(keyspace).sortByProximity(FBUtilities.getLocalAddress(),
 endpoints);
+            
DatabaseDescriptor.getEndPointSnitch().sortByProximity(FBUtilities.getLocalAddress(),
 endpoints);
             List<InetAddress> endpointsForCL = endpoints.subList(0, 
responseCount);
             Set<AbstractBounds> restrictedRanges = 
queryRange.restrictTo(nodeRange);
             for (AbstractBounds range : restrictedRanges)

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=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
Fri Apr 16 19:23:47 2010
@@ -274,7 +274,7 @@ public class StorageService implements I
         try
         {
             Constructor<? extends AbstractReplicationStrategy> constructor = 
cls.getConstructor(parameterTypes);
-            replicationStrategy = constructor.newInstance(tokenMetadata, 
DatabaseDescriptor.getEndPointSnitch(table));
+            replicationStrategy = constructor.newInstance(tokenMetadata, 
DatabaseDescriptor.getEndPointSnitch());
         }
         catch (Exception e)
         {
@@ -801,7 +801,7 @@ public class StorageService implements I
                 // find alive sources for our new ranges
                 for (Range myNewRange : myNewRanges)
                 {
-                    List<InetAddress> sources = 
DatabaseDescriptor.getEndPointSnitch(table).getSortedListByProximity(myAddress, 
rangeAddresses.get(myNewRange));
+                    List<InetAddress> sources = 
DatabaseDescriptor.getEndPointSnitch().getSortedListByProximity(myAddress, 
rangeAddresses.get(myNewRange));
 
                     assert (!sources.contains(myAddress));
 
@@ -1219,7 +1219,7 @@ public class StorageService implements I
     public InetAddress findSuitableEndPoint(String table, byte[] key) throws 
IOException, UnavailableException
     {
         List<InetAddress> endpoints = getNaturalEndpoints(table, key);
-        
DatabaseDescriptor.getEndPointSnitch(table).sortByProximity(FBUtilities.getLocalAddress(),
 endpoints);
+        
DatabaseDescriptor.getEndPointSnitch().sortByProximity(FBUtilities.getLocalAddress(),
 endpoints);
         for (InetAddress endpoint : endpoints)
         {
             if (FailureDetector.instance.isAlive(endpoint))

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=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
Fri Apr 16 19:23:47 2010
@@ -758,7 +758,6 @@ public class CassandraServer implements 
                     ks_def.name, 
                     (Class<? extends 
AbstractReplicationStrategy>)Class.forName(ks_def.strategy_class), 
                     ks_def.replication_factor, 
-                    
(IEndPointSnitch)Class.forName(ks_def.snitch_class).newInstance(), 
                     cfDefs.toArray(new CFMetaData[cfDefs.size()]));
             AddKeyspace add = new AddKeyspace(ksm);
             add.apply();
@@ -770,18 +769,6 @@ public class CassandraServer implements 
             ex.initCause(e);
             throw ex;
         }
-        catch (InstantiationException e)
-        {
-            InvalidRequestException ex = new 
InvalidRequestException(e.getMessage());
-            ex.initCause(e);
-            throw ex;
-        }
-        catch (IllegalAccessException e)
-        {
-            InvalidRequestException ex = new 
InvalidRequestException(e.getMessage());
-            ex.initCause(e);
-            throw ex;
-        }
         catch (ConfigurationException e)
         {
             InvalidRequestException ex = new 
InvalidRequestException(e.getMessage());

Modified: cassandra/trunk/test/conf/cassandra.xml
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/conf/cassandra.xml?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/test/conf/cassandra.xml (original)
+++ cassandra/trunk/test/conf/cassandra.xml Fri Apr 16 19:23:47 2010
@@ -37,6 +37,7 @@
    <DiskAccessMode>mmap</DiskAccessMode>
    <MemtableThroughputInMB>1</MemtableThroughputInMB>
    <MemtableOperationsInMillions>0.00002</MemtableOperationsInMillions> <!-- 
20 -->
+   <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
    <Keyspaces>
      <Keyspace Name = "Keyspace1">
        <ColumnFamily Name="Standard1" RowsCached="10%" KeysCached="0"/>
@@ -49,7 +50,6 @@
        <ColumnFamily ColumnType="Super" CompareSubcolumnsWith="UTF8Type" 
Name="Super4"/>
        
<ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy>
        <ReplicationFactor>1</ReplicationFactor>
-       
<EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
      </Keyspace>
      <Keyspace Name = "Keyspace2">
        <ColumnFamily Name="Standard1"/>

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=935049&r1=935048&r2=935049&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Fri Apr 16 
19:23:47 2010
@@ -283,7 +283,7 @@ public class DefsTest extends CleanupHel
     {
         DecoratedKey dk = Util.dk("key0");
         CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", 
"Standard", new UTF8Type(), null, "A new cf for a new ks", 0, 0);
-        KSMetaData newKs = new KSMetaData(newCf.tableName, 
RackAwareStrategy.class, 5, new EndPointSnitch(), newCf);
+        KSMetaData newKs = new KSMetaData(newCf.tableName, 
RackAwareStrategy.class, 5, newCf);
         
         int segmentCount = CommitLog.instance().getSegmentCount();
         new AddKeyspace(newKs).apply();


Reply via email to