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


Reply via email to