Author: jbellis Date: Mon Oct 3 20:12:35 2011 New Revision: 1178554 URL: http://svn.apache.org/viewvc?rev=1178554&view=rev Log: check all interfaces for a match with split location before falling back to random replica patch by Brian ONeill; reviewed by jbellis for CASSANDRA-3211
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java Modified: cassandra/branches/cassandra-0.8/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1178554&r1=1178553&r2=1178554&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8/CHANGES.txt Mon Oct 3 20:12:35 2011 @@ -15,7 +15,9 @@ * fix Scrub compaction finishing (CASSANDRA-3255) * Fix tool .bat files when CASSANDRA_HOME contains spaces (CASSANDRA-3258) * Evict gossip state immediately when a token is taken over by a new IP (CASSANDRA-3259) - * allow wrapping ranges in Hadoop queries (CASSANDRA-3137) + * (Hadoop) allow wrapping ranges in queries (CASSANDRA-3137) + * (Hadoop) check all interfaces for a match with split location + before falling back to random replica (CASSANDRA-3211) 0.8.6 Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java?rev=1178554&r1=1178553&r2=1178554&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java Mon Oct 3 20:12:35 2011 @@ -23,6 +23,8 @@ package org.apache.cassandra.hadoop; import java.io.IOException; import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.*; @@ -31,14 +33,11 @@ import com.google.common.collect.Abstrac import org.apache.cassandra.auth.SimpleAuthenticator; import org.apache.cassandra.config.ConfigurationException; -import org.apache.cassandra.db.*; +import org.apache.cassandra.db.IColumn; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.TypeParser; import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.thrift.*; -import org.apache.cassandra.thrift.Column; -import org.apache.cassandra.thrift.CounterColumn; -import org.apache.cassandra.thrift.SuperColumn; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; @@ -147,15 +146,18 @@ public class ColumnFamilyRecordReader ex // not necessarily on Cassandra machines, too. This should be adequate for single-DC clusters, at least. private String getLocation() { - InetAddress[] localAddresses; + ArrayList<InetAddress> localAddresses = new ArrayList<InetAddress>(); try { - localAddresses = InetAddress.getAllByName(InetAddress.getLocalHost().getHostAddress()); + Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); + while (nets.hasMoreElements()) + localAddresses.addAll(Collections.list(nets.nextElement().getInetAddresses())); } - catch (UnknownHostException e) + catch (SocketException e) { throw new AssertionError(e); } + for (InetAddress address : localAddresses) { for (String location : split.getLocations())