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 2012/02/24 17:46:48 UTC
[9/9] git commit: always compact away deleted hints immediately after
handoff patch by brandonwilliams and jbellis for CASSANDRA-3955
always compact away deleted hints immediately after handoff
patch by brandonwilliams and jbellis for CASSANDRA-3955
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5cc12f37
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5cc12f37
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5cc12f37
Branch: refs/heads/cassandra-1.0
Commit: 5cc12f37f6419a80efaa7341e8a284e19165ef30
Parents: e2ac530
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 24 10:35:58 2012 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 24 10:35:58 2012 -0600
----------------------------------------------------------------------
CHANGES.txt | 4 ++
.../apache/cassandra/db/HintedHandOffManager.java | 23 +++++++++-----
2 files changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5cc12f37/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9cb9414..31ae77d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+1.0.9
+ * always compact away deleted hints immediately after handoff (CASSANDRA-3955)
+
+
1.0.8
* fix race between cleanup and flush on secondary index CFSes (CASSANDRA-3712)
* avoid including non-queried nodes in rangeslice read repair
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5cc12f37/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManager.java b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
index e2dc046..ca416d7 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -25,13 +25,13 @@ 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 java.util.concurrent.*;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import com.google.common.collect.ImmutableSortedSet;
+import org.apache.cassandra.io.sstable.Descriptor;
+import org.apache.cassandra.io.sstable.SSTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -166,7 +166,6 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
return;
Token<?> token = StorageService.instance.getTokenMetadata().getToken(endpoint);
ByteBuffer tokenBytes = StorageService.getPartitioner().getTokenFactory().toByteArray(token);
- final ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF);
final RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, tokenBytes);
rm.delete(new QueryPath(HINTS_CF), System.currentTimeMillis());
@@ -179,8 +178,7 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
{
logger_.info("Deleting any stored hints for " + endpoint);
rm.apply();
- hintStore.forceBlockingFlush();
- CompactionManager.instance.submitMaximal(hintStore, Integer.MAX_VALUE);
+ compact();
}
catch (Exception e)
{
@@ -191,6 +189,16 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
StorageService.optionalTasks.execute(runnable);
}
+ private Future<?> compact() throws ExecutionException, InterruptedException
+ {
+ final ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF);
+ hintStore.forceBlockingFlush();
+ ArrayList<Descriptor> descriptors = new ArrayList<Descriptor>();
+ for (SSTable sstable : hintStore.getSSTables())
+ descriptors.add(sstable.descriptor);
+ return CompactionManager.instance.submitUserDefined(hintStore, descriptors, Integer.MAX_VALUE);
+ }
+
private static boolean pagingFinished(ColumnFamily hintColumnFamily, ByteBuffer startColumn)
{
// done if no hints found or the start column (same as last column processed in previous iteration) is the only one
@@ -361,8 +369,7 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
{
try
{
- hintStore.forceBlockingFlush();
- CompactionManager.instance.submitMaximal(hintStore, Integer.MAX_VALUE).get();
+ compact().get();
}
catch (Exception e)
{