You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2013/12/30 15:20:41 UTC
[2/3] git commit: Allow truncating hints from nodetool. Patch by
Sankalp Kohli, reviewed by brandonwilliams for CASSANDRA-6158
Allow truncating hints from nodetool.
Patch by Sankalp Kohli, reviewed by brandonwilliams for CASSANDRA-6158
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/604e31b6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/604e31b6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/604e31b6
Branch: refs/heads/trunk
Commit: 604e31b60998d5df349f8cc84d06bbae1391dc0e
Parents: bbc0891
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 08:17:50 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 08:17:50 2013 -0600
----------------------------------------------------------------------
.../cassandra/db/HintedHandOffManager.java | 24 ++++++++++++++-
.../cassandra/db/HintedHandOffManagerMBean.java | 6 ++++
.../org/apache/cassandra/tools/NodeCmd.java | 8 ++++-
.../org/apache/cassandra/tools/NodeProbe.java | 21 +++++++++++++
.../apache/cassandra/tools/NodeToolHelp.yaml | 3 ++
.../apache/cassandra/db/HintedHandOffTest.java | 32 ++++++++++++++++++++
6 files changed, 92 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/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 9508a86..40d5aaa 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -225,7 +225,29 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
}
}
};
- StorageService.optionalTasks.execute(runnable);
+ StorageService.optionalTasks.submit(runnable);
+ }
+
+ //foobar
+ public void truncateAllHints() throws ExecutionException, InterruptedException
+ {
+ Runnable runnable = new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ logger.info("Truncating all stored hints.");
+ Keyspace.open(Keyspace.SYSTEM_KS).getColumnFamilyStore(SystemKeyspace.HINTS_CF).truncateBlocking();
+ }
+ catch (Exception e)
+ {
+ logger.warn("Could not truncate all hints.", e);
+ }
+ }
+ };
+ StorageService.optionalTasks.submit(runnable).get();
+
}
@VisibleForTesting
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java b/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java
index 9a024e6..bbb2a14 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java
@@ -19,6 +19,7 @@ package org.apache.cassandra.db;
import java.net.UnknownHostException;
import java.util.List;
+import java.util.concurrent.ExecutionException;
public interface HintedHandOffManagerMBean
{
@@ -29,6 +30,11 @@ public interface HintedHandOffManagerMBean
public void deleteHintsForEndpoint(final String host);
/**
+ * Truncate all the hints
+ */
+ public void truncateAllHints() throws ExecutionException, InterruptedException;
+
+ /**
* List all the endpoints that this node has hints for.
* @return set of endpoints; as Strings
*/
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index c32539f..f1e7c73 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -164,6 +164,7 @@ public class NodeCmd
STOP,
STOPDAEMON,
TPSTATS,
+ TRUNCATEHINTS,
UPGRADESSTABLES,
VERSION,
DESCRIBERING,
@@ -1116,7 +1117,12 @@ public class NodeCmd
case RESETLOCALSCHEMA: probe.resetLocalSchema(); break;
case ENABLEBACKUP : probe.setIncrementalBackupsEnabled(true); break;
case DISABLEBACKUP : probe.setIncrementalBackupsEnabled(false); break;
-
+
+ case TRUNCATEHINTS:
+ if (arguments.length > 1) badUse("Too many arguments.");
+ else if (arguments.length == 1) probe.truncateHints(arguments[0]);
+ else probe.truncateHints();
+ break;
case STATUS :
if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 4f60464..1bb9d4e 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -726,6 +726,27 @@ public class NodeProbe
hhProxy.pauseHintsDelivery(false);
}
+ public void truncateHints(final String host)
+ {
+ hhProxy.deleteHintsForEndpoint(host);
+ }
+
+ public void truncateHints()
+ {
+ try
+ {
+ hhProxy.truncateAllHints();
+ }
+ catch (ExecutionException e)
+ {
+ throw new RuntimeException("Error while executing truncate hints", e);
+ }
+ catch (InterruptedException e)
+ {
+ throw new RuntimeException("Error while executing truncate hints", e);
+ }
+ }
+
public void stopNativeTransport()
{
ssProxy.stopNativeTransport();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
----------------------------------------------------------------------
diff --git a/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml b/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
index 54d0884..42fda0d 100644
--- a/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
+++ b/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
@@ -67,6 +67,9 @@ commands:
- name: enablehandoff
help: |
Reenable the future hints storing on the current node
+ - name: truncatehints <host-name>
+ help: |
+ Truncate all hints on the local node, or truncate hints for the endpoint specified.
- name: resumehandoff
help: |
Resume hints delivery process
http://git-wip-us.apache.org/repos/asf/cassandra/blob/604e31b6/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/HintedHandOffTest.java b/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
index 23db4bb..ab5bc23 100644
--- a/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
+++ b/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
@@ -92,4 +92,36 @@ public class HintedHandOffTest extends SchemaLoader
Map<UUID, Integer> returned = rows.one().getMap("hints_dropped", UUIDType.instance, Int32Type.instance);
assertEquals(Iterators.getLast(returned.values().iterator()).intValue(), 99);
}
+
+ @Test(timeout = 5000)
+ public void testTruncateHints() throws Exception
+ {
+ Keyspace systemKeyspace = Keyspace.open("system");
+ ColumnFamilyStore hintStore = systemKeyspace.getColumnFamilyStore(SystemKeyspace.HINTS_CF);
+ hintStore.clearUnsafe();
+
+ // insert 1 hint
+ RowMutation rm = new RowMutation(KEYSPACE4, ByteBufferUtil.bytes(1));
+ rm.add(STANDARD1_CF, ByteBufferUtil.bytes(String.valueOf(COLUMN1)), ByteBufferUtil.EMPTY_BYTE_BUFFER, System.currentTimeMillis());
+
+ HintedHandOffManager.instance.hintFor(rm, HintedHandOffManager.calculateHintTTL(rm), UUID.randomUUID()).apply();
+
+ assert getNoOfHints() == 1;
+
+ HintedHandOffManager.instance.truncateAllHints();
+
+ while(getNoOfHints() > 0)
+ {
+ Thread.sleep(100);
+ }
+
+ assert getNoOfHints() == 0;
+ }
+
+ private int getNoOfHints()
+ {
+ String req = "SELECT * FROM system.%s";
+ UntypedResultSet resultSet = processInternal(String.format(req, SystemKeyspace.HINTS_CF));
+ return resultSet.size();
+ }
}