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"