Author: jbellis
Date: Wed Sep 28 04:11:19 2011
New Revision: 1176712
URL: http://svn.apache.org/viewvc?rev=1176712&view=rev
Log:
Keep SimpleSnitch proximity ordering unchanged from what the Strategy
generates, as intended
patch by slebresne; reviewed by jbellis for CASSANDRA-3262
Modified:
cassandra/branches/cassandra-0.8/CHANGES.txt
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractNetworkTopologySnitch.java
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/SimpleSnitch.java
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1176712&r1=1176711&r2=1176712&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Wed Sep 28 04:11:19 2011
@@ -10,6 +10,9 @@
* Fix FD leak when internode encryption is enabled (CASSANDRA-3257)
* FBUtilities.hexToBytes(String) to throw NumberFormatException when string
contains non-hex characters (CASSANDRA-3231)
+ * Keep SimpleSnitch proximity ordering unchanged from what the Strategy
+ generates, as intended (CASSANDRA-3262)
+
0.8.6
* revert CASSANDRA-2388
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java?rev=1176712&r1=1176711&r2=1176712&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java
(original)
+++
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java
Wed Sep 28 04:11:19 2011
@@ -20,8 +20,7 @@
package org.apache.cassandra.locator;
import java.net.InetAddress;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,13 +28,35 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractEndpointSnitch implements IEndpointSnitch
{
private static final Logger logger =
LoggerFactory.getLogger(AbstractEndpointSnitch.class);
-
- public abstract List<InetAddress> getSortedListByProximity(InetAddress
address, Collection<InetAddress> unsortedAddress);
- public abstract void sortByProximity(InetAddress address,
List<InetAddress> addresses);
+ public abstract int compareEndpoints(InetAddress target, InetAddress a1,
InetAddress a2);
- public int compareEndpoints(InetAddress target, InetAddress a1,
InetAddress a2)
+ /**
+ * Sorts the <tt>Collection</tt> of node addresses by proximity to the
given address
+ * @param address the address to sort by proximity to
+ * @param unsortedAddress the nodes to sort
+ * @return a new sorted <tt>List</tt>
+ */
+ public List<InetAddress> getSortedListByProximity(InetAddress address,
Collection<InetAddress> unsortedAddress)
{
- return a1.getHostAddress().compareTo(a2.getHostAddress());
+ List<InetAddress> preferred = new
ArrayList<InetAddress>(unsortedAddress);
+ sortByProximity(address, preferred);
+ return preferred;
+ }
+
+ /**
+ * Sorts the <tt>List</tt> of node addresses, in-place, by proximity to
the given address
+ * @param address the address to sort the proximity by
+ * @param addresses the nodes to sort
+ */
+ public void sortByProximity(final InetAddress address, List<InetAddress>
addresses)
+ {
+ Collections.sort(addresses, new Comparator<InetAddress>()
+ {
+ public int compare(InetAddress a1, InetAddress a2)
+ {
+ return compareEndpoints(address, a1, a2);
+ }
+ });
}
public void gossiperStarting()
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractNetworkTopologySnitch.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractNetworkTopologySnitch.java?rev=1176712&r1=1176711&r2=1176712&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractNetworkTopologySnitch.java
(original)
+++
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/AbstractNetworkTopologySnitch.java
Wed Sep 28 04:11:19 2011
@@ -47,36 +47,6 @@ public abstract class AbstractNetworkTop
*/
abstract public String getDatacenter(InetAddress endpoint);
- /**
- * Sorts the <tt>Collection</tt> of node addresses by proximity to the
given address
- * @param address the address to sort by proximity to
- * @param addresses the nodes to sort
- * @return a new sorted <tt>List</tt>
- */
- public List<InetAddress> getSortedListByProximity(final InetAddress
address, Collection<InetAddress> addresses)
- {
- List<InetAddress> preferred = new ArrayList<InetAddress>(addresses);
- sortByProximity(address, preferred);
- return preferred;
- }
-
- /**
- * Sorts the <tt>List</tt> of node addresses by proximity to the given
address
- * @param address the address to sort the proximity by
- * @param addresses the nodes to sort
- * @return the sorted <tt>List</tt>
- */
- public void sortByProximity(final InetAddress address, List<InetAddress>
addresses)
- {
- Collections.sort(addresses, new Comparator<InetAddress>()
- {
- public int compare(InetAddress a1, InetAddress a2)
- {
- return compareEndpoints(address, a1, a2);
- }
- });
- }
-
public int compareEndpoints(InetAddress address, InetAddress a1,
InetAddress a2)
{
if (address.equals(a1) && !address.equals(a2))
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java?rev=1176712&r1=1176711&r2=1176712&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
(original)
+++
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
Wed Sep 28 04:11:19 2011
@@ -129,6 +129,7 @@ public class DynamicEndpointSnitch exten
return list;
}
+ @Override
public void sortByProximity(final InetAddress address, List<InetAddress>
addresses)
{
assert address.equals(FBUtilities.getLocalAddress()); // we only know
about ourself
@@ -144,13 +145,7 @@ public class DynamicEndpointSnitch exten
private void sortByProximityWithScore(final InetAddress address,
List<InetAddress> addresses)
{
- Collections.sort(addresses, new Comparator<InetAddress>()
- {
- public int compare(InetAddress a1, InetAddress a2)
- {
- return compareEndpoints(address, a1, a2);
- }
- });
+ super.sortByProximity(address, addresses);
}
private void sortByProximityWithBadness(final InetAddress address,
List<InetAddress> addresses)
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/SimpleSnitch.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/SimpleSnitch.java?rev=1176712&r1=1176711&r2=1176712&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/SimpleSnitch.java
(original)
+++
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/SimpleSnitch.java
Wed Sep 28 04:11:19 2011
@@ -39,13 +39,17 @@ public class SimpleSnitch extends Abstra
{
return "datacenter1";
}
-
- public List<InetAddress> getSortedListByProximity(final InetAddress
address, Collection<InetAddress> addresses)
+
+ @Override
+ public void sortByProximity(final InetAddress address, List<InetAddress>
addresses)
{
- return new ArrayList<InetAddress>(addresses);
+ // Optimization to avoid walking the list
}
- public void sortByProximity(final InetAddress address, List<InetAddress>
addresses)
+ public int compareEndpoints(InetAddress target, InetAddress a1,
InetAddress a2)
{
+ // Making all endpoints equal ensures we won't change the original
ordering (since
+ // Collections.sort is guaranteed to be stable)
+ return 0;
}
}