You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/06/25 19:44:56 UTC
svn commit: r958049 - in /cassandra/trunk: ./ debian/
interface/thrift/gen-java/org/apache/cassandra/thrift/
src/java/org/apache/cassandra/concurrent/ src/java/org/apache/cassandra/db/
src/java/org/apache/cassandra/db/commitlog/ src/java/org/apache/cas...
Author: jbellis
Date: Fri Jun 25 17:44:55 2010
New Revision: 958049
URL: http://svn.apache.org/viewvc?rev=958049&view=rev
Log:
merge from 0.6
Modified:
cassandra/trunk/ (props changed)
cassandra/trunk/CHANGES.txt
cassandra/trunk/debian/cassandra.default
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/concurrent/DebuggableThreadPoolExecutor.java
cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6:922689-956385
+/cassandra/branches/cassandra-0.6:922689-958048
/incubator/cassandra/branches/cassandra-0.3:774578-796573
/incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5:888872-915439
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Fri Jun 25 17:44:55 2010
@@ -58,6 +58,9 @@ dev
* remove inactive stream managers after AES streams files (CASSANDRA-1169)
* add JMX metrics for row-level bloom filter false positives (CASSANDRA-1212)
* added a redhat init script to contrib (CASSANDRA-1201)
+ * use midpoint when bootstrapping a new machine into range with not
+ much data yet instead of random token (CASSANDRA-1112)
+ * kill server on OOM in executor stage as well as Thrift (CASSANDRA-1226)
0.6.2
Modified: cassandra/trunk/debian/cassandra.default
URL: http://svn.apache.org/viewvc/cassandra/trunk/debian/cassandra.default?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/debian/cassandra.default (original)
+++ cassandra/trunk/debian/cassandra.default Fri Jun 25 17:44:55 2010
@@ -10,7 +10,7 @@ JVM_MAX_MEM="1G"
# Specifies the initial size (in bytes) of memory allocation. Must be
# a multiple of 1024 greater than 1MB. You can append the letters K or
# M to indicate kilobytes or megabytes respectively.
-JVM_START_MEM="128M"
+JVM_START_MEM="256"
# Specifies any additional arguments to the JVM.
-JVM_EXTRA_OPTS="-XX:SurvivorRatio=128 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:MaxTenuringThreshold=0"
+JVM_EXTRA_OPTS="-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:+HeapDumpOnOutOfMemoryError"
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-956385
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-958048
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Cassandra.java:888872-903502
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-956385
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-958048
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Column.java:888872-903502
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-956385
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-958048
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:888872-903502
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-956385
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-958048
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:888872-903502
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jun 25 17:44:55 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-956385
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-958048
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:888872-903502
Modified: cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java Fri Jun 25 17:44:55 2010
@@ -92,7 +92,7 @@ public class DebuggableThreadPoolExecuto
}
catch (ExecutionException e)
{
- logger.error("Error in executor futuretask", e);
+ Thread.getDefaultUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
}
}
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=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Fri Jun 25 17:44:55 2010
@@ -172,8 +172,7 @@ public class HintedHandOffManager
private static void deliverHintsToEndpoint(InetAddress endpoint) throws IOException, DigestMismatchException, InvalidRequestException, TimeoutException
{
- if (logger_.isDebugEnabled())
- logger_.debug("Started hinted handoff for endpoint " + endpoint);
+ logger_.info("Started hinted handoff for endpoint " + endpoint);
// 1. Get the key of the endpoint we need to handoff
// 2. For each column read the list of rows: subcolumns are KS + SEPARATOR + CF
@@ -181,6 +180,7 @@ public class HintedHandOffManager
// 4. Force a flush
// 5. Do major compaction to clean up all deletes etc.
DecoratedKey epkey = StorageService.getPartitioner().decorateKey(endpoint.getAddress());
+ int rowsReplayed = 0;
ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF);
byte[] startColumn = ArrayUtils.EMPTY_BYTE_ARRAY;
while (true)
@@ -198,22 +198,31 @@ public class HintedHandOffManager
{
String[] parts = getTableAndCFNames(tableCF.name());
if (sendMessage(endpoint, parts[0], parts[1], keyColumn.name()))
+ {
deleteHintKey(endpoint.getAddress(), keyColumn.name(), tableCF.name());
+ rowsReplayed++;
+ }
+
+ startColumn = keyColumn.name();
}
}
}
- hintStore.forceFlush();
- try
- {
- CompactionManager.instance.submitMajor(hintStore, 0, Integer.MAX_VALUE).get();
- }
- catch (Exception e)
+
+ if (rowsReplayed > 0)
{
- throw new RuntimeException(e);
+ hintStore.forceFlush();
+ try
+ {
+ CompactionManager.instance.submitMajor(hintStore, 0, Integer.MAX_VALUE).get();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
}
- if (logger_.isDebugEnabled())
- logger_.debug("Finished hinted handoff for endpoint " + endpoint);
+ logger_.info(String.format("Finished hinted handoff of %s rows to endpoint %s",
+ rowsReplayed, endpoint));
}
/** called when a keyspace is dropped or rename. newTable==null in the case of a drop. */
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Fri Jun 25 17:44:55 2010
@@ -180,7 +180,8 @@ public class Memtable implements Compara
public String toString()
{
- return "Memtable(" + cfs.getColumnFamilyName() + ")@" + hashCode();
+ return String.format("Memtable-%s@%s(%s bytes, %s operations)",
+ cfs.getColumnFamilyName(), hashCode(), currentThroughput, currentOperations);
}
/**
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java Fri Jun 25 17:44:55 2010
@@ -285,6 +285,7 @@ public class CommitLog
StageManager.getStage(StageManager.MUTATION_STAGE).submit(runnable);
}
reader.close();
+ logger.info("Finished reading " + file);
}
// wait for all the writes to finish on the mutation stage
Modified: cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java Fri Jun 25 17:44:55 2010
@@ -90,18 +90,11 @@ public class AntiEntropyService
// millisecond lifetime to store trees before they become stale
public final static long TREE_STORE_TIMEOUT = 600000;
- // max millisecond frequency that natural (automatic) repairs should run at
- public final static long NATURAL_REPAIR_FREQUENCY = 3600000;
// singleton enforcement
public static final AntiEntropyService instance = new AntiEntropyService();
/**
- * Map of CFPair to timestamp of the beginning of the last natural repair.
- */
- private final ConcurrentMap<CFPair, Long> naturalRepairs;
-
- /**
* Map of column families to remote endpoints that need to rendezvous. The
* first endpoint to arrive at the rendezvous will store its tree in the
* appropriate slot of the TreePair object, and the second to arrive will
@@ -121,7 +114,6 @@ public class AntiEntropyService
*/
protected AntiEntropyService()
{
- naturalRepairs = new ConcurrentHashMap<CFPair, Long>();
trees = new HashMap<CFPair, ExpiringMap<InetAddress, TreePair>>();
sessions = new ConcurrentHashMap<String, BlockingQueue<TreeRequest>>();
}
@@ -283,34 +275,6 @@ public class AntiEntropyService
}
/**
- * Should only be used for testing.
- */
- void clearNaturalRepairs_TestsOnly()
- {
- naturalRepairs.clear();
- }
-
- /**
- * @param cf The column family.
- * @return True if enough time has elapsed since the beginning of the last natural repair.
- */
- private boolean shouldRunNaturally(CFPair cf)
- {
- Long curtime = System.currentTimeMillis();
- Long pretime = naturalRepairs.putIfAbsent(cf, curtime);
- if (pretime != null)
- {
- if (pretime < (curtime - NATURAL_REPAIR_FREQUENCY))
- // replace pretime with curtime, unless someone beat us to it
- return naturalRepairs.replace(cf, pretime, curtime);
- // need to wait longer
- logger.debug("Skipping natural repair: last occurred " + (curtime - pretime) + "ms ago.");
- return false;
- }
- return true;
- }
-
- /**
* Return a Validator object which can be used to collect hashes for a column family.
* A Validator must be prepared() before use, and completed() afterward.
*
@@ -331,7 +295,7 @@ public class AntiEntropyService
if (DatabaseDescriptor.getReplicationFactor(table) < 2)
return new NoopValidator();
CFPair cfpair = new CFPair(table, cf);
- if (initiator == null && !shouldRunNaturally(cfpair))
+ if (initiator == null)
return new NoopValidator();
return new Validator(cfpair);
}
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=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Fri Jun 25 17:44:55 2010
@@ -1354,7 +1354,7 @@ public class StorageService implements I
FBUtilities.sortSampledKeys(keys, range);
if (keys.size() < 3)
- return partitioner_.getRandomToken();
+ return partitioner_.midpoint(range.left, range.right);
else
return keys.get(keys.size() / 2).token;
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java Fri Jun 25 17:44:55 2010
@@ -79,7 +79,7 @@ public class CassandraDaemon extends org
{
public void uncaughtException(Thread t, Throwable e)
{
- logger.error("Fatal exception in thread " + t, e);
+ logger.error("Uncaught exception in thread " + t, e);
if (e instanceof OutOfMemoryError)
{
System.exit(100);
Modified: cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java?rev=958049&r1=958048&r2=958049&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java Fri Jun 25 17:44:55 2010
@@ -97,14 +97,8 @@ public class AntiEntropyServiceTest exte
@Test
public void testGetValidator() throws Throwable
{
- aes.clearNaturalRepairs_TestsOnly();
-
// not major
assert aes.getValidator(tablename, cfname, null, false) instanceof NoopValidator;
- // adds entry to naturalRepairs
- assert aes.getValidator(tablename, cfname, null, true) instanceof Validator;
- // blocked by entry in naturalRepairs
- assert aes.getValidator(tablename, cfname, null, true) instanceof NoopValidator;
// triggered manually
assert aes.getValidator(tablename, cfname, REMOTE, true) instanceof Validator;
}