Author: jbellis Date: Fri Dec 23 16:44:47 2011 New Revision: 1222743 URL: http://svn.apache.org/viewvc?rev=1222743&view=rev Log: merge from 1.0
Modified: cassandra/trunk/ (props changed) cassandra/trunk/CHANGES.txt cassandra/trunk/conf/cassandra.yaml cassandra/trunk/contrib/ (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionParameters.java cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java cassandra/trunk/src/java/org/apache/cassandra/service/GCInspector.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Propchange: cassandra/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7:1026516-1211709 /cassandra/branches/cassandra-0.7.0:1053690-1055654 -/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0:1125021-1130369 /cassandra/branches/cassandra-0.8.1:1101014-1125018 -/cassandra/branches/cassandra-1.0:1167085-1222420 +/cassandra/branches/cassandra-1.0:1167085-1222470 /cassandra/branches/cassandra-1.0.0:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5:1208016 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689 Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Fri Dec 23 16:44:47 2011 @@ -32,6 +32,9 @@ * optimize memtable iteration during range scan (CASSANDRA-3638) 1.0.7 + * attempt hint delivery every ten minutes, or when failure detector + notifies us that a node is back up, whichever comes first. hint + handoff throttle delay default changed to 1ms, from 50 (CASSANDRA-3554) * add nodetool setstreamthroughput (CASSANDRA-3571) * fix assertion when dropping a columnfamily with no sstables (CASSANDRA-3614) * more efficient allocation of small bloom filters (CASSANDRA-3618) @@ -40,6 +43,7 @@ * stop thrift service in shutdown hook so we can quiesce MessagingService (CASSANDRA-3335) Merged from 0.8: + * avoid logging (harmless) exception when GC takes < 1ms (CASSANDRA-3656) * prevent new nodes from thinking down nodes are up forever (CASSANDRA-3626) * Flush non-cfs backed secondary indexes (CASSANDRA-3659) Modified: cassandra/trunk/conf/cassandra.yaml URL: http://svn.apache.org/viewvc/cassandra/trunk/conf/cassandra.yaml?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/conf/cassandra.yaml (original) +++ cassandra/trunk/conf/cassandra.yaml Fri Dec 23 16:44:47 2011 @@ -26,8 +26,8 @@ hinted_handoff_enabled: true # this defines the maximum amount of time a dead host will have hints # generated. After it has been dead this long, hints will be dropped. max_hint_window_in_ms: 3600000 # one hour -# Sleep this long after delivering each row or row fragment -hinted_handoff_throttle_delay_in_ms: 50 +# Sleep this long after delivering each hint +hinted_handoff_throttle_delay_in_ms: 1 # authentication backend, implementing IAuthenticator; used to identify users authenticator: org.apache.cassandra.auth.AllowAllAuthenticator Propchange: cassandra/trunk/contrib/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/contrib:922689-1052356,1052358-1053452,1053454,1053456-1068009 /cassandra/branches/cassandra-0.7/contrib:1026516-1211709 /cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654 -/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/contrib:1125021-1130369 /cassandra/branches/cassandra-0.8.1/contrib:1101014-1125018 -/cassandra/branches/cassandra-1.0/contrib:1167085-1222420 +/cassandra/branches/cassandra-1.0/contrib:1167085-1222470 /cassandra/branches/cassandra-1.0.0/contrib:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/contrib:1208016 /cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1211709 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1101014-1125018 -/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167085-1222420 +/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167085-1222470 /cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1208016 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1211709 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1101014-1125018 -/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167085-1222420 +/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167085-1222470 /cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1208016 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1211709 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1101014-1125018 -/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167085-1222420 +/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167085-1222470 /cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1208016 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1211709 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1101014-1125018 -/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167085-1222420 +/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167085-1222470 /cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1208016 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 23 16:44:47 2011 @@ -1,10 +1,10 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1211709 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1212854,1212938,1214916,1222372 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1220925,1220927-1222440 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1101014-1125018 -/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167085-1222420 +/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167085-1222470 /cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243 /cassandra/branches/cassandra-1.0.5/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1208016 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689 Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri Dec 23 16:44:47 2011 @@ -169,6 +169,17 @@ public class ColumnFamilyStore implement } } + public void setCompactionStrategyClass(String compactionStrategyClass) throws ConfigurationException + { + metadata.compactionStrategyClass = CFMetaData.createCompactionStrategy(compactionStrategyClass); + maybeReloadCompactionStrategy(); + } + + public String getCompactionStrategyClass() + { + return metadata.compactionStrategyClass.getName(); + } + private ColumnFamilyStore(Table table, String columnFamilyName, IPartitioner partitioner, int generation, CFMetaData metadata) { assert metadata != null : "null metadata for " + table + ":" + columnFamilyName; @@ -1267,7 +1278,6 @@ public class ColumnFamilyStore implement * @return true if we found all keys we were looking for, otherwise false */ public List<Row> getRangeSlice(ByteBuffer superColumn, final AbstractBounds<RowPosition> range, int maxResults, IFilter columnFilter) - throws ExecutionException, InterruptedException { assert range instanceof Bounds || !((Range)range).isWrapAround() || range.right.isMinimum() Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Fri Dec 23 16:44:47 2011 @@ -22,6 +22,8 @@ import java.io.IOException; import java.util.List; import java.util.concurrent.ExecutionException; +import org.apache.cassandra.config.ConfigurationException; + /** * The MBean interface for ColumnFamilyStore */ @@ -194,6 +196,17 @@ public interface ColumnFamilyStoreMBean public void setMaximumCompactionThreshold(int threshold); /** + * Sets the compaction strategy by class name + * @param className the name of the compaction strategy class + */ + public void setCompactionStrategyClass(String className) throws ConfigurationException; + + /** + * Gets the compaction strategy class name + */ + public String getCompactionStrategyClass(); + + /** * Disable automatic compaction. */ public void disableAutoCompaction(); Modified: cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Fri Dec 23 16:44:47 2011 @@ -20,23 +20,26 @@ package org.apache.cassandra.db; import java.io.DataInputStream; import java.io.IOException; -import java.io.InputStream; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.*; import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import javax.management.MBeanServer; import javax.management.ObjectName; +import com.google.common.collect.ImmutableSortedSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.compaction.CompactionManager; +import org.apache.cassandra.db.filter.IFilter; +import org.apache.cassandra.db.filter.NamesQueryFilter; import org.apache.cassandra.db.filter.QueryFilter; import org.apache.cassandra.db.filter.QueryPath; import org.apache.cassandra.dht.IPartitioner; @@ -61,7 +64,7 @@ import org.cliffc.high_scale_lib.NonBloc * (We have to use String keys for compatibility with OPP.) * SuperColumns in these rows are the mutations to replay, with uuid names: * - * <dest ip>: { // key + * <dest token>: { // key * <uuid>: { // supercolumn * mutation: <mutation> // subcolumn * version: <mutation serialization version> @@ -96,7 +99,7 @@ public class HintedHandOffManager implem private final ExecutorService executor_ = new JMXEnabledThreadPoolExecutor("HintedHandoff", Thread.MIN_PRIORITY); - public HintedHandOffManager() + public void start() { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try @@ -107,25 +110,23 @@ public class HintedHandOffManager implem { throw new RuntimeException(e); } - } - public void registerMBean() - { logger_.debug("Created HHOM instance, registered MBean."); + + Runnable runnable = new Runnable() + { + public void run() + { + scheduleAllDeliveries(); + } + }; + StorageService.optionalTasks.scheduleWithFixedDelay(runnable, 10, 10, TimeUnit.MINUTES); } - private static boolean sendMutation(InetAddress endpoint, RowMutation mutation) throws IOException + private static void sendMutation(InetAddress endpoint, RowMutation mutation) throws TimeoutException { IWriteResponseHandler responseHandler = WriteResponseHandler.create(endpoint); MessagingService.instance().sendRR(mutation, endpoint, responseHandler); - - try - { - responseHandler.get(); - } - catch (TimeoutException e) - { - return false; - } + responseHandler.get(); try { @@ -135,8 +136,6 @@ public class HintedHandOffManager implem { throw new AssertionError(e); } - - return true; } private static void deleteHint(ByteBuffer tokenBytes, ByteBuffer hintId, long timestamp) throws IOException @@ -226,7 +225,7 @@ public class HintedHandOffManager implem logger_.debug("schema for {} matches local schema", endpoint); return waited; } - + private void deliverHintsToEndpoint(InetAddress endpoint) throws IOException, DigestMismatchException, InvalidRequestException, TimeoutException, InterruptedException { ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF); @@ -275,12 +274,12 @@ public class HintedHandOffManager implem while (true) { QueryFilter filter = QueryFilter.getSliceFilter(epkey, new QueryPath(HINTS_CF), startColumn, ByteBufferUtil.EMPTY_BYTE_BUFFER, false, PAGE_SIZE); - ColumnFamily hintColumnFamily = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), Integer.MAX_VALUE); - if (pagingFinished(hintColumnFamily, startColumn)) + ColumnFamily hintsPage = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), Integer.MAX_VALUE); + if (pagingFinished(hintsPage, startColumn)) break; page: - for (IColumn hint : hintColumnFamily.getSortedColumns()) + for (IColumn hint : hintsPage.getSortedColumns()) { startColumn = hint.name(); for (IColumn subColumn : hint.getSubColumns()) @@ -305,14 +304,15 @@ public class HintedHandOffManager implem DataInputStream in = new DataInputStream(ByteBufferUtil.inputStream(mutationColumn.value())); RowMutation rm = RowMutation.serializer().deserialize(in, ByteBufferUtil.toInt(versionColumn.value())); - if (sendMutation(endpoint, rm)) + try { + sendMutation(endpoint, rm); deleteHint(tokenBytes, hint.name(), hint.maxTimestamp()); rowsReplayed++; } - else + catch (TimeoutException e) { - logger_.info("Could not complete hinted handoff to " + endpoint); + logger_.info(String.format("Timed out replaying hints to %s; aborting further deliveries", endpoint)); break delivery; } } @@ -335,12 +335,37 @@ public class HintedHandOffManager implem rowsReplayed, endpoint)); } + /** + * Attempt delivery to any node for which we have hints. Necessary since we can generate hints even for + * nodes which are never officially down/failed. + */ + private void scheduleAllDeliveries() + { + if (logger_.isDebugEnabled()) + logger_.debug("Started scheduleAllDeliveries"); + + ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF); + IPartitioner p = StorageService.getPartitioner(); + Range range = new Range(p.getMinimumToken(), p.getMinimumToken(), p); + IFilter filter = new NamesQueryFilter(ImmutableSortedSet.<ByteBuffer>of()); + List<Row> rows = hintStore.getRangeSlice(null, range, Integer.MAX_VALUE, filter); + for (Row row : rows) + { + Token<?> token = StorageService.getPartitioner().getTokenFactory().fromByteArray(row.key.key); + InetAddress target = StorageService.instance.getTokenMetadata().getEndpoint(token); + scheduleHintDelivery(target); + } + + if (logger_.isDebugEnabled()) + logger_.debug("Finished scheduleAllDeliveries"); + } + /* * This method is used to deliver hints to a particular endpoint. * When we learn that some endpoint is back up we deliver the data * to him via an event driven mechanism. */ - public void deliverHints(final InetAddress to) + public void scheduleHintDelivery(final InetAddress to) { logger_.debug("deliverHints to {}", to); if (!queuedDeliveries.add(to)) @@ -356,9 +381,9 @@ public class HintedHandOffManager implem executor_.execute(r); } - public void deliverHints(String to) throws UnknownHostException + public void scheduleHintDelivery(String to) throws UnknownHostException { - deliverHints(InetAddress.getByName(to)); + scheduleHintDelivery(InetAddress.getByName(to)); } public List<String> listEndpointsPendingHints() Modified: cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java Fri Dec 23 16:44:47 2011 @@ -18,6 +18,7 @@ package org.apache.cassandra.db; +import java.net.UnknownHostException; import java.util.List; import java.util.Map; @@ -25,9 +26,9 @@ public interface HintedHandOffManagerMBe { /** * Nuke all hints from this node to `ep`. - * @param epaddr String rep. of endpoint address to delete hints for, either ip address ("127.0.0.1") or hostname + * @param host String rep. of endpoint address to delete hints for, either ip address ("127.0.0.1") or hostname */ - public void deleteHintsForEndpoint(final String epaddr); + public void deleteHintsForEndpoint(final String host); /** * List all the endpoints that this node has hints for. @@ -42,5 +43,8 @@ public interface HintedHandOffManagerMBe * @return map of endpoint -> hint count */ public Map<String, Integer> countPendingHints(); + + /** force hint delivery to an endpoint **/ + public void scheduleHintDelivery(String host) throws UnknownHostException; } Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java Fri Dec 23 16:44:47 2011 @@ -112,7 +112,7 @@ public class RowMutation implements IMut * The format is the following: * * HintsColumnFamily: { // cf - * <dest ip>: { // key + * <dest token>: { // key * <uuid>: { // super-column * table: <table> // columns * key: <key> Modified: cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionParameters.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionParameters.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionParameters.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionParameters.java Fri Dec 23 16:44:47 2011 @@ -150,7 +150,10 @@ public class CompressionParameters try { - return 1024 * Integer.parseInt(chLengthKB); + int parsed = Integer.parseInt(chLengthKB); + if (parsed > Integer.MAX_VALUE / 1024) + throw new ConfigurationException("Value of " + CHUNK_LENGTH_KB + " is too large (" + parsed + ")"); + return 1024 * parsed; } catch (NumberFormatException e) { Modified: cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java Fri Dec 23 16:44:47 2011 @@ -82,8 +82,9 @@ public class IncomingTcpConnection exten } else { - // streaming connections are per-session and have a fixed version. we can't do anything with a new-version stream connection, so drop it. - logger.error("Received untranslated stream from newer protocol version. Terminating connection!"); + // streaming connections are per-session and have a fixed version. we can't do anything with a wrong-version stream connection, so drop it. + logger.error("Received stream using protocol version {} (my version {}). Terminating connection", + version, MessagingService.version_); } // We are done with this connection.... return; Modified: cassandra/trunk/src/java/org/apache/cassandra/service/GCInspector.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/GCInspector.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/GCInspector.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/GCInspector.java Fri Dec 23 16:44:47 2011 @@ -99,8 +99,7 @@ public class GCInspector if (previousTotal.equals(total)) continue; gctimes.put(gc.getName(), total); - Long duration = total - previousTotal; - assert duration > 0; + Long duration = total - previousTotal; // may be zero for a really fast collection Long previousCount = gccounts.get(gc.getName()); Long count = gc.getCollectionCount(); 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=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Fri Dec 23 16:44:47 2011 @@ -838,21 +838,10 @@ public class StorageProxy implements Sto if (logger.isDebugEnabled()) logger.debug("local range slice"); ColumnFamilyStore cfs = Table.open(command.keyspace).getColumnFamilyStore(command.column_family); - try - { - rows.addAll(cfs.getRangeSlice(command.super_column, - range, - command.max_keys, - QueryFilter.getFilter(command.predicate, cfs.getComparator()))); - } - catch (ExecutionException e) - { - throw new RuntimeException(e.getCause()); - } - catch (InterruptedException e) - { - throw new AssertionError(e); - } + rows.addAll(cfs.getRangeSlice(command.super_column, + range, + command.max_keys, + QueryFilter.getFilter(command.predicate, cfs.getComparator()))); } else { Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Fri Dec 23 16:44:47 2011 @@ -514,7 +514,7 @@ public class StorageService implements I MigrationManager.passiveAnnounce(Schema.instance.getVersion()); Gossiper.instance.addLocalApplicationState(ApplicationState.RELEASE_VERSION, valueFactory.releaseVersion()); - HintedHandOffManager.instance.registerMBean(); + HintedHandOffManager.instance.start(); if (DatabaseDescriptor.isAutoBootstrap() && DatabaseDescriptor.getSeeds().contains(FBUtilities.getBroadcastAddress()) @@ -1494,7 +1494,7 @@ public class StorageService implements I public void onAlive(InetAddress endpoint, EndpointState state) { if (!isClientMode && getTokenMetadata().isMember(endpoint)) - deliverHints(endpoint); + HintedHandOffManager.instance.scheduleHintDelivery(endpoint); } public void onRemove(InetAddress endpoint) @@ -1545,18 +1545,9 @@ public class StorageService implements I return map; } - /** - * Deliver hints to the specified node when it has crashed - * and come back up/ marked as alive after a network partition - */ - public final void deliverHints(InetAddress endpoint) - { - HintedHandOffManager.instance.deliverHints(endpoint); - } - public final void deliverHints(String host) throws UnknownHostException { - HintedHandOffManager.instance.deliverHints(host); + HintedHandOffManager.instance.scheduleHintDelivery(host); } public Token getLocalToken() Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=1222743&r1=1222742&r2=1222743&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Fri Dec 23 16:44:47 2011 @@ -300,9 +300,6 @@ public interface StorageServiceMBean */ public void truncate(String keyspace, String columnFamily) throws UnavailableException, TimeoutException, IOException; - /** force hint delivery to an endpoint **/ - public void deliverHints(String host) throws UnknownHostException; - /** * given a list of tokens (representing the nodes in the cluster), returns * a mapping from "token -> %age of cluster owned by that token"