You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/11/02 15:04:36 UTC
svn commit: r1030047 - in /cassandra/trunk: CHANGES.txt
src/java/org/apache/cassandra/service/StorageProxy.java
Author: gdusbabek
Date: Tue Nov 2 14:04:35 2010
New Revision: 1030047
URL: http://svn.apache.org/viewvc?rev=1030047&view=rev
Log:
include dead hosts in unreachable. patch by gdusbabek, reviewed by jbellis. CASSANDRA-1678
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1030047&r1=1030046&r2=1030047&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Tue Nov 2 14:04:35 2010
@@ -6,10 +6,10 @@ dev
* fix IntegerType.getString (CASSANDRA-1681)
* log tpstats when dropping messages (CASSANDRA-1660)
* make -Djava.net.preferIPv4Stack=true the default (CASSANDRA-628)
- * make -Djava.net.preferIPv4Stack=true the default (CASSANDRA-628)
* add INTERNAL_RESPONSE verb to differentiate from responses related
to client requests (CASSANDRA-1685)
* log tpstats when dropping messages (CASSANDRA-1660)
+ * include unreachable nodes in describeSchemaVersions (CASSANDRA-1678)
0.7.0-beta3
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=1030047&r1=1030046&r2=1030047&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Tue Nov 2 14:04:35 2010
@@ -27,6 +27,7 @@ import java.util.concurrent.*;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import static com.google.common.base.Charsets.UTF_8;
import org.apache.commons.lang.ArrayUtils;
@@ -65,6 +66,7 @@ public class StorageProxy implements Sto
private static final LatencyTracker rangeStats = new LatencyTracker();
private static final LatencyTracker writeStats = new LatencyTracker();
private static boolean hintedHandoffEnabled = DatabaseDescriptor.hintedHandoffEnabled();
+ private static final String UNREACHABLE = "UNREACHABLE";
private StorageProxy() {}
static
@@ -491,8 +493,6 @@ public class StorageProxy implements Sto
*/
public static Map<String, List<String>> describeSchemaVersions()
{
- final Map<String, List<String>> results = new HashMap<String, List<String>>();
-
final String myVersion = DatabaseDescriptor.getDefsVersion().toString();
final Map<InetAddress, UUID> versions = new ConcurrentHashMap<InetAddress, UUID>();
final Set<InetAddress> liveHosts = Gossiper.instance.getLiveMembers();
@@ -523,30 +523,32 @@ public class StorageProxy implements Sto
logger.debug("My version is " + myVersion);
- // first, indicate any hosts that did not respond.
- final Set<InetAddress> ackedHosts = versions.keySet();
- if (ackedHosts.size() < liveHosts.size())
- {
- Set<InetAddress> missingHosts = new HashSet<InetAddress>(liveHosts);
- missingHosts.removeAll(ackedHosts);
- assert missingHosts.size() > 0;
- List<String> missingHostNames = new ArrayList<String>(missingHosts.size());
- for (InetAddress host : missingHosts)
- missingHostNames.add(host.getHostAddress());
- results.put(DatabaseDescriptor.INITIAL_VERSION.toString(), missingHostNames);
- logger.debug("Hosts not in agreement. Didn't get a response from everybody: " + StringUtils.join(missingHostNames, ","));
+ // maps versions to hosts that are on that version.
+ Map<String, List<String>> results = new HashMap<String, List<String>>();
+ Iterable<InetAddress> allHosts = Iterables.concat(Gossiper.instance.getLiveMembers(), Gossiper.instance.getUnreachableMembers());
+ for (InetAddress host : allHosts)
+ {
+ UUID version = versions.get(host);
+ String stringVersion = version == null ? UNREACHABLE : version.toString();
+ List<String> hosts = results.get(stringVersion);
+ if (hosts == null)
+ {
+ hosts = new ArrayList<String>();
+ results.put(stringVersion, hosts);
+ }
+ hosts.add(host.getHostAddress());
}
-
+ if (results.get(UNREACHABLE) != null)
+ logger.debug("Hosts not in agreement. Didn't get a response from everybody: " + StringUtils.join(results.get(UNREACHABLE), ","));
// check for version disagreement. log the hosts that don't agree.
- for (InetAddress host : ackedHosts)
+ for (Map.Entry<String, List<String>> entry : results.entrySet())
{
- String uuid = versions.get(host).toString();
- if (!results.containsKey(uuid))
- results.put(uuid, new ArrayList<String>());
- results.get(uuid).add(host.getHostAddress());
- if (!uuid.equals(myVersion))
- logger.debug("%s disagrees (%s)", host.getHostAddress(), uuid);
+ if (entry.getKey().equals(UNREACHABLE) || entry.getKey().equals(myVersion))
+ continue;
+ for (String host : entry.getValue())
+ logger.debug("%s disagrees (%s)", host, entry.getKey());
}
+
if (results.size() == 1)
logger.debug("Schemas are in agreement.");