You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2015/06/16 20:48:35 UTC
cassandra git commit: Add nodetool replaybatchlog command
Repository: cassandra
Updated Branches:
refs/heads/trunk 25dca4669 -> 07bb8f98e
Add nodetool replaybatchlog command
Patch by carlyeks; reviewed by tjake for CASSANDRA-9547
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/07bb8f98
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/07bb8f98
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/07bb8f98
Branch: refs/heads/trunk
Commit: 07bb8f98e07f10308d65c264fe29f8c5ee8d4f4f
Parents: 25dca46
Author: Carl Yeksigian <ca...@apache.org>
Authored: Thu Jun 4 10:50:31 2015 -0400
Committer: T Jake Luciani <ja...@apache.org>
Committed: Tue Jun 16 14:46:20 2015 -0400
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/BatchlogManager.java | 6 +--
.../cassandra/db/BatchlogManagerMBean.java | 2 +-
.../org/apache/cassandra/tools/NodeProbe.java | 17 ++++++++
.../org/apache/cassandra/tools/NodeTool.java | 1 +
.../tools/nodetool/ReplayBatchlog.java | 42 ++++++++++++++++++++
6 files changed, 65 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 77ac9e8..c2e5c97 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0:
+ * Add nodetool command to replay batchlog (CASSANDRA-9547)
* Make file buffer cache independent of paths being read (CASSANDRA-8897)
* Remove deprecated legacy Hadoop code (CASSANDRA-9353)
* Decommissioned nodes will not rejoin the cluster (CASSANDRA-8801)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/src/java/org/apache/cassandra/db/BatchlogManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BatchlogManager.java b/src/java/org/apache/cassandra/db/BatchlogManager.java
index dd84ac8..6038475 100644
--- a/src/java/org/apache/cassandra/db/BatchlogManager.java
+++ b/src/java/org/apache/cassandra/db/BatchlogManager.java
@@ -60,7 +60,7 @@ import static org.apache.cassandra.cql3.QueryProcessor.executeInternal;
public class BatchlogManager implements BatchlogManagerMBean
{
- private static final String MBEAN_NAME = "org.apache.cassandra.db:type=BatchlogManager";
+ public static final String MBEAN_NAME = "org.apache.cassandra.db:type=BatchlogManager";
private static final long REPLAY_INTERVAL = 60 * 1000; // milliseconds
private static final int PAGE_SIZE = 128; // same as HHOM, for now, w/out using any heuristics. TODO: set based on avg batch size.
@@ -112,9 +112,9 @@ public class BatchlogManager implements BatchlogManagerMBean
return totalBatchesReplayed.longValue();
}
- public void forceBatchlogReplay()
+ public void forceBatchlogReplay() throws Exception
{
- startBatchlogReplay();
+ startBatchlogReplay().get();
}
public Future<?> startBatchlogReplay()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/src/java/org/apache/cassandra/db/BatchlogManagerMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BatchlogManagerMBean.java b/src/java/org/apache/cassandra/db/BatchlogManagerMBean.java
index 2e60ba4..a688117 100644
--- a/src/java/org/apache/cassandra/db/BatchlogManagerMBean.java
+++ b/src/java/org/apache/cassandra/db/BatchlogManagerMBean.java
@@ -34,5 +34,5 @@ public interface BatchlogManagerMBean
/**
* Forces batchlog replay. Returns immediately if replay is already in progress.
*/
- public void forceBatchlogReplay();
+ public void forceBatchlogReplay() throws Exception;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/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 14215dc..db22208 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -51,6 +51,8 @@ import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import org.apache.cassandra.concurrent.Stage;
+import org.apache.cassandra.db.BatchlogManager;
+import org.apache.cassandra.db.BatchlogManagerMBean;
import org.apache.cassandra.db.ColumnFamilyStoreMBean;
import org.apache.cassandra.db.HintedHandOffManager;
import org.apache.cassandra.db.HintedHandOffManagerMBean;
@@ -111,6 +113,7 @@ public class NodeProbe implements AutoCloseable
private CacheServiceMBean cacheService;
private StorageProxyMBean spProxy;
private HintedHandOffManagerMBean hhProxy;
+ private BatchlogManagerMBean bmProxy;
private boolean failed;
/**
@@ -198,6 +201,8 @@ public class NodeProbe implements AutoCloseable
gcProxy = JMX.newMBeanProxy(mbeanServerConn, name, GCInspectorMXBean.class);
name = new ObjectName(Gossiper.MBEAN_NAME);
gossProxy = JMX.newMBeanProxy(mbeanServerConn, name, GossiperMBean.class);
+ name = new ObjectName(BatchlogManager.MBEAN_NAME);
+ bmProxy = JMX.newMBeanProxy(mbeanServerConn, name, BatchlogManagerMBean.class);
}
catch (MalformedObjectNameException e)
{
@@ -1272,6 +1277,18 @@ public class NodeProbe implements AutoCloseable
}
}
}
+
+ public void replayBatchlog() throws IOException
+ {
+ try
+ {
+ bmProxy.forceBatchlogReplay();
+ }
+ catch (Exception e)
+ {
+ throw new IOException(e);
+ }
+ }
}
class ColumnFamilyStoreMBeanIterator implements Iterator<Map.Entry<String, ColumnFamilyStoreMBean>>
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/src/java/org/apache/cassandra/tools/NodeTool.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeTool.java b/src/java/org/apache/cassandra/tools/NodeTool.java
index 10c0915..dc3b876 100644
--- a/src/java/org/apache/cassandra/tools/NodeTool.java
+++ b/src/java/org/apache/cassandra/tools/NodeTool.java
@@ -96,6 +96,7 @@ public class NodeTool
RemoveNode.class,
Assassinate.class,
Repair.class,
+ ReplayBatchlog.class,
SetCacheCapacity.class,
SetHintedHandoffThrottleInKB.class,
SetCompactionThreshold.class,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07bb8f98/src/java/org/apache/cassandra/tools/nodetool/ReplayBatchlog.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ReplayBatchlog.java b/src/java/org/apache/cassandra/tools/nodetool/ReplayBatchlog.java
new file mode 100644
index 0000000..e3dcbd4
--- /dev/null
+++ b/src/java/org/apache/cassandra/tools/nodetool/ReplayBatchlog.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.tools.nodetool;
+
+import java.io.IOError;
+import java.io.IOException;
+
+import io.airlift.command.Command;
+import org.apache.cassandra.tools.NodeProbe;
+import org.apache.cassandra.tools.NodeTool;
+
+@Command(name = "replaybatchlog", description = "Kick off batchlog replay and wait for finish")
+public class ReplayBatchlog extends NodeTool.NodeToolCmd
+{
+ protected void execute(NodeProbe probe)
+ {
+ try
+ {
+ probe.replayBatchlog();
+ }
+ catch (IOException e)
+ {
+ throw new IOError(e);
+ }
+ }
+}