Author: jbellis Date: Wed May 5 14:50:48 2010 New Revision: 941327 URL: http://svn.apache.org/viewvc?rev=941327&view=rev Log: make hinted handoff option global to make it easier to merge to trunk. patch by jbellis
Modified: cassandra/branches/cassandra-0.6/CHANGES.txt cassandra/branches/cassandra-0.6/conf/storage-conf.xml cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/config/DatabaseDescriptor.java cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java Modified: cassandra/branches/cassandra-0.6/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=941327&r1=941326&r2=941327&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.6/CHANGES.txt Wed May 5 14:50:48 2010 @@ -5,7 +5,7 @@ * add latency histograms to CFSMBean (CASSANDRA-1024) * make resolving timestamp ties deterministic by using value bytes as a tiebreaker (CASSANDRA-1039) - * Add per-keyspace option to turn off Hinted Handoff (CASSANDRA-894) + * Add option to turn off Hinted Handoff (CASSANDRA-894) 0.6.1 Modified: cassandra/branches/cassandra-0.6/conf/storage-conf.xml URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/conf/storage-conf.xml?rev=941327&r1=941326&r2=941327&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/conf/storage-conf.xml (original) +++ cassandra/branches/cassandra-0.6/conf/storage-conf.xml Wed May 5 14:50:48 2010 @@ -46,6 +46,11 @@ <AutoBootstrap>false</AutoBootstrap> <!-- + ~ See http://wiki.apache.org/cassandra/HintedHandoff + --> + <HintedHandoffEnabled>true</HintedHandoffEnabled> + + <!-- ~ Keyspaces and ColumnFamilies: ~ A ColumnFamily is the Cassandra concept closest to a relational ~ table. Keyspaces are separate groups of ColumnFamilies. Except in Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/config/DatabaseDescriptor.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=941327&r1=941326&r2=941327&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original) +++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Wed May 5 14:50:48 2010 @@ -132,7 +132,7 @@ public class DatabaseDescriptor private static boolean snapshotBeforeCompaction; private static boolean autoBootstrap = false; - private static Map<String,Boolean> hintedHandOffByKS = new HashMap<String,Boolean>(); + private static boolean hintedHandoffEnabled = true; private static IAuthenticator authenticator = new AllowAllAuthenticator(); @@ -467,6 +467,20 @@ public class DatabaseDescriptor if ( value != null) CommitLog.setSegmentSize(Integer.parseInt(value) * 1024 * 1024); + /* should Hinted Handoff be on? */ + String hintedHandOffStr = xmlUtils.getNodeValue("/Storage/HintedHandoffEnabled"); + if (hintedHandOffStr != null) + { + if (hintedHandOffStr.equalsIgnoreCase("true")) + hintedHandoffEnabled = true; + else if (hintedHandOffStr.equalsIgnoreCase("false")) + hintedHandoffEnabled = false; + else + throw new ConfigurationException("Unrecognized value for HintedHandoff. Use 'true' or 'false'."); + } + if (logger.isDebugEnabled()) + logger.debug("setting hintedHandoffEnabled to " + hintedHandoffEnabled); + readTablesFromXml(); if (tables.isEmpty()) throw new ConfigurationException("No keyspaces configured"); @@ -621,17 +635,6 @@ public class DatabaseDescriptor throw new ConfigurationException("Invalid endpointsnitch class " + endPointSnitchClassName + " " + e.getMessage()); } - /* should Hinted Handoff be on? */ - String hintedHandOffStr = xmlUtils.getNodeValue("/Storage/Keyspaces/keyspa...@name='" + ksName + "']/HintedHandoff"); - if (hintedHandOffStr == null || hintedHandOffStr.equalsIgnoreCase("true")) - hintedHandOffByKS.put(ksName, true); - else if (hintedHandOffStr.equalsIgnoreCase("false")) - hintedHandOffByKS.put(ksName, false); - else - throw new ConfigurationException("Unrecognized value for HintedHandoff. Use 'true' or 'false'."); - if (logger.isDebugEnabled()) - logger.debug("setting hintedHandOff to " + hintedHandOffByKS.get(ksName).toString() + " for " + ksName); - String xqlTable = "/Storage/Keyspaces/keyspa...@name='" + ksName + "']/"; NodeList columnFamilies = xmlUtils.getRequestedNodeList(xqlTable + "ColumnFamily"); @@ -1222,8 +1225,8 @@ public class DatabaseDescriptor return autoBootstrap; } - public static boolean isHintedHandOff(String table) + public static boolean hintedHandoffEnabled() { - return hintedHandOffByKS.get(table); + return hintedHandoffEnabled; } } Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java?rev=941327&r1=941326&r2=941327&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java (original) +++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java Wed May 5 14:50:48 2010 @@ -29,7 +29,6 @@ import com.google.common.collect.Multima import org.apache.cassandra.dht.Range; import org.apache.cassandra.dht.Token; import org.apache.cassandra.gms.FailureDetector; -import org.apache.cassandra.gms.Gossiper; import org.apache.cassandra.service.WriteResponseHandler; import org.apache.cassandra.thrift.ConsistencyLevel; import org.apache.cassandra.utils.FBUtilities; @@ -88,7 +87,7 @@ public abstract class AbstractReplicatio } // if everything was alive or we're not doing HH on this keyspace, stop with just the live nodes - if (map.size() == targets.size() || !DatabaseDescriptor.isHintedHandOff(table)) + if (map.size() == targets.size() || !DatabaseDescriptor.hintedHandoffEnabled()) return map; // assign dead endpoints to be hinted to the closest live one, or to the local node