From 938a6e7ccd0ef4526f8b1040696a413316d3f692 Mon Sep 17 00:00:00 2001 From: Jean-Daniel Cryans Date: Mon, 28 Jan 2013 21:07:46 +0000 Subject: [PATCH] HBASE-7673 Incorrect error logging when a replication peer is removed (Gabriel Reid via JD) git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1439635 13f79535-47bb-0310-9956-ffa450edef68 --- .../replication/ReplicationZookeeper.java | 9 +++++++ .../ReplicationSourceManager.java | 8 +++--- .../replication/TestReplicationZookeeper.java | 25 +++++++++++++++++-- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/ReplicationZookeeper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/ReplicationZookeeper.java index 221e1dbd2d8..cd888670f12 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/ReplicationZookeeper.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/ReplicationZookeeper.java @@ -995,6 +995,15 @@ public class ReplicationZookeeper implements Closeable { public Map getPeerClusters() { return this.peerClusters; } + + /** + * Determine if a ZK path points to a peer node. + * @param path path to be checked + * @return true if the path points to a peer node, otherwise false + */ + public boolean isPeerPath(String path) { + return path.split("/").length == peersZNode.split("/").length + 1; + } /** * Extracts the znode name of a peer cluster from a ZK path diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java index 14be80078a6..5ef544d7a28 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java @@ -73,7 +73,7 @@ public class ReplicationSourceManager { private final ReplicationZookeeper zkHelper; // All about stopping private final Stoppable stopper; - // All logs we are currently trackign + // All logs we are currently tracking private final Map> hlogsById; private final Configuration conf; private final FileSystem fs; @@ -504,8 +504,10 @@ public class ReplicationSourceManager { if (peers == null) { return; } - String id = ReplicationZookeeper.getZNodeName(path); - removePeer(id); + if (zkHelper.isPeerPath(path)) { + String id = ReplicationZookeeper.getZNodeName(path); + removePeer(id); + } } /** diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationZookeeper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationZookeeper.java index 553b5cd7d27..3820e490486 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationZookeeper.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationZookeeper.java @@ -18,6 +18,10 @@ package org.apache.hadoop.hbase.replication; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; @@ -28,6 +32,7 @@ import org.apache.hadoop.hbase.MediumTests; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.catalog.CatalogTracker; +import org.apache.hadoop.hbase.zookeeper.ZKUtil; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.AfterClass; @@ -35,8 +40,6 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; -import static org.junit.Assert.assertEquals; - @Category(MediumTests.class) public class TestReplicationZookeeper { @@ -74,6 +77,24 @@ public class TestReplicationZookeeper { // HBASE-5586 used to get an NPE assertEquals(0, repZk.getSlavesAddresses("1").size()); } + + @Test + public void testIsPeerPath_PathToParentOfPeerNode() { + String peerParentNode = repZk.getPeersZNode(); + assertFalse(repZk.isPeerPath(peerParentNode)); + } + + @Test + public void testIsPeerPath_PathToChildOfPeerNode() { + String peerChild = ZKUtil.joinZNode(ZKUtil.joinZNode(repZk.getPeersZNode(), "1"), "child"); + assertFalse(repZk.isPeerPath(peerChild)); + } + + @Test + public void testIsPeerPath_ActualPeerPath() { + String peerPath = ZKUtil.joinZNode(repZk.getPeersZNode(), "1"); + assertTrue(repZk.isPeerPath(peerPath)); + } static class DummyServer implements Server {