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();