You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ec...@apache.org on 2016/07/12 21:59:19 UTC
hbase git commit: HBASE-16208 Check that the row exists before
attempting to remove a queue from TableBasedReplicationQueuesImpl
Repository: hbase
Updated Branches:
refs/heads/master 6d94925af -> f292048ff
HBASE-16208 Check that the row exists before attempting to remove a queue from TableBasedReplicationQueuesImpl
Signed-off-by: Elliott Clark <ec...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f292048f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f292048f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f292048f
Branch: refs/heads/master
Commit: f292048ffd91503360cb56bb9b5f60fd47e2ebe0
Parents: 6d94925
Author: Joseph Hwang <jz...@fb.com>
Authored: Mon Jul 11 10:45:53 2016 -0700
Committer: Elliott Clark <ec...@apache.org>
Committed: Tue Jul 12 14:50:07 2016 -0700
----------------------------------------------------------------------
.../replication/TableBasedReplicationQueuesImpl.java | 10 +++++++---
.../hbase/replication/TestReplicationStateHBaseImpl.java | 7 ++++++-
2 files changed, 13 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/f292048f/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java
index 28fa967..3ee6fde 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java
@@ -93,11 +93,15 @@ public class TableBasedReplicationQueuesImpl extends ReplicationTableBase
@Override
public void removeQueue(String queueId) {
-
try {
byte[] rowKey = queueIdToRowKey(queueId);
- Delete deleteQueue = new Delete(rowKey);
- safeQueueUpdate(deleteQueue);
+ if (checkQueueExists(queueId)) {
+ Delete deleteQueue = new Delete(rowKey);
+ safeQueueUpdate(deleteQueue);
+ } else {
+ LOG.info("No logs were registered for queue id=" + queueId + " so no rows were removed " +
+ "from the replication table while removing the queue");
+ }
} catch (IOException | ReplicationException e) {
String errMsg = "Failed removing queue queueId=" + queueId;
abortable.abort(errMsg, e);
http://git-wip-us.apache.org/repos/asf/hbase/blob/f292048f/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java
index ccae8a5..7ec6df8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java
@@ -84,7 +84,7 @@ public class TestReplicationStateHBaseImpl {
conf.setClass("hbase.region.replica.replication.replicationQueues.class",
TableBasedReplicationQueuesImpl.class, ReplicationQueues.class);
conf.setClass("hbase.region.replica.replication.replicationQueuesClient.class",
- TableBasedReplicationQueuesClientImpl.class, ReplicationQueuesClient.class);
+ TableBasedReplicationQueuesClientImpl.class, ReplicationQueuesClient.class);
utility.startMiniCluster();
zkw = HBaseTestingUtility.getZooKeeperWatcher(utility);
String replicationZNodeName = conf.get("zookeeper.znode.replication", "replication");
@@ -195,6 +195,11 @@ public class TestReplicationStateHBaseImpl {
assertNull(rq1.getLogsInQueue("Queue1"));
// Test that getting logs from a non-existent queue aborts
assertEquals(6, ds1.getAbortCount());
+ // Test removing a non-existent queue does not cause an abort. This is because we can
+ // attempt to remove a queue that has no corresponding Replication Table row (if we never
+ // registered a WAL for it)
+ rq1.removeQueue("NotHereQueue");
+ assertEquals(6, ds1.getAbortCount());
} catch (ReplicationException e) {
e.printStackTrace();
fail("testAddLog received a ReplicationException");