1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.replication;
20
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertTrue;
23
24 import java.io.IOException;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.hadoop.conf.Configuration;
29 import org.apache.hadoop.hbase.ChoreService;
30 import org.apache.hadoop.hbase.ClusterId;
31 import org.apache.hadoop.hbase.CoordinatedStateManager;
32 import org.apache.hadoop.hbase.HBaseTestingUtility;
33 import org.apache.hadoop.hbase.HConstants;
34 import org.apache.hadoop.hbase.Server;
35 import org.apache.hadoop.hbase.ServerName;
36 import org.apache.hadoop.hbase.client.ClusterConnection;
37 import org.apache.hadoop.hbase.testclassification.MediumTests;
38 import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
39 import org.apache.hadoop.hbase.zookeeper.ZKClusterId;
40 import org.apache.hadoop.hbase.zookeeper.ZKConfig;
41 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
42 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
43 import org.apache.zookeeper.KeeperException;
44 import org.junit.After;
45 import org.junit.AfterClass;
46 import org.junit.Before;
47 import org.junit.BeforeClass;
48 import org.junit.Test;
49 import org.junit.experimental.categories.Category;
50
51 @Category(MediumTests.class)
52 public class TestReplicationStateZKImpl extends TestReplicationStateBasic {
53
54 private static final Log LOG = LogFactory.getLog(TestReplicationStateZKImpl.class);
55
56 private static Configuration conf;
57 private static HBaseTestingUtility utility;
58 private static ZooKeeperWatcher zkw;
59 private static String replicationZNode;
60 private ReplicationQueuesZKImpl rqZK;
61
62 @BeforeClass
63 public static void setUpBeforeClass() throws Exception {
64 utility = new HBaseTestingUtility();
65 utility.startMiniZKCluster();
66 conf = utility.getConfiguration();
67 conf.setBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, true);
68 zkw = HBaseTestingUtility.getZooKeeperWatcher(utility);
69 String replicationZNodeName = conf.get("zookeeper.znode.replication", "replication");
70 replicationZNode = ZKUtil.joinZNode(zkw.baseZNode, replicationZNodeName);
71 KEY_ONE = initPeerClusterState("/hbase1");
72 KEY_TWO = initPeerClusterState("/hbase2");
73 }
74
75 private static String initPeerClusterState(String baseZKNode)
76 throws IOException, KeeperException {
77
78 Configuration testConf = new Configuration(conf);
79 testConf.set(HConstants.ZOOKEEPER_ZNODE_PARENT, baseZKNode);
80 ZooKeeperWatcher zkw1 = new ZooKeeperWatcher(testConf, "test1", null);
81 String fakeRs = ZKUtil.joinZNode(zkw1.rsZNode, "hostname1.example.org:1234");
82 ZKUtil.createWithParents(zkw1, fakeRs);
83 ZKClusterId.setClusterId(zkw1, new ClusterId());
84 return ZKConfig.getZooKeeperClusterKey(testConf);
85 }
86
87 @Before
88 @Override
89 public void setUp() {
90 super.setUp();
91 DummyServer ds1 = new DummyServer(server1);
92 DummyServer ds2 = new DummyServer(server2);
93 DummyServer ds3 = new DummyServer(server3);
94 rq1 = ReplicationFactory.getReplicationQueues(zkw, conf, ds1);
95 rq2 = ReplicationFactory.getReplicationQueues(zkw, conf, ds2);
96 rq3 = ReplicationFactory.getReplicationQueues(zkw, conf, ds3);
97 rqc = ReplicationFactory.getReplicationQueuesClient(zkw, conf, ds1);
98 rp = ReplicationFactory.getReplicationPeers(zkw, conf, zkw);
99 OUR_KEY = ZKConfig.getZooKeeperClusterKey(conf);
100 rqZK = new ReplicationQueuesZKImpl(zkw, conf, ds1);
101 }
102
103 @After
104 public void tearDown() throws KeeperException, IOException {
105 ZKUtil.deleteNodeRecursively(zkw, replicationZNode);
106 }
107
108 @AfterClass
109 public static void tearDownAfterClass() throws Exception {
110 utility.shutdownMiniZKCluster();
111 }
112
113 @Test
114 public void testIsPeerPath_PathToParentOfPeerNode() {
115 assertFalse(rqZK.isPeerPath(rqZK.peersZNode));
116 }
117
118 @Test
119 public void testIsPeerPath_PathToChildOfPeerNode() {
120 String peerChild = ZKUtil.joinZNode(ZKUtil.joinZNode(rqZK.peersZNode, "1"), "child");
121 assertFalse(rqZK.isPeerPath(peerChild));
122 }
123
124 @Test
125 public void testIsPeerPath_ActualPeerPath() {
126 String peerPath = ZKUtil.joinZNode(rqZK.peersZNode, "1");
127 assertTrue(rqZK.isPeerPath(peerPath));
128 }
129
130 @Test
131 public void testZNodeCversion() throws ReplicationException, KeeperException {
132 rq1.init(server1);
133
134 assertTrue(rqc.getReplicatorsZNodeCversion().containsKey(server1));
135 }
136
137 static class DummyServer implements Server {
138 private String serverName;
139 private boolean isAborted = false;
140 private boolean isStopped = false;
141
142 public DummyServer(String serverName) {
143 this.serverName = serverName;
144 }
145
146 @Override
147 public Configuration getConfiguration() {
148 return conf;
149 }
150
151 @Override
152 public ZooKeeperWatcher getZooKeeper() {
153 return zkw;
154 }
155
156 @Override
157 public CoordinatedStateManager getCoordinatedStateManager() {
158 return null;
159 }
160
161 @Override
162 public ClusterConnection getConnection() {
163 return null;
164 }
165
166 @Override
167 public MetaTableLocator getMetaTableLocator() {
168 return null;
169 }
170
171 @Override
172 public ServerName getServerName() {
173 return ServerName.valueOf(this.serverName);
174 }
175
176 @Override
177 public void abort(String why, Throwable e) {
178 LOG.info("Aborting " + serverName);
179 this.isAborted = true;
180 }
181
182 @Override
183 public boolean isAborted() {
184 return this.isAborted;
185 }
186
187 @Override
188 public void stop(String why) {
189 this.isStopped = true;
190 }
191
192 @Override
193 public boolean isStopped() {
194 return this.isStopped;
195 }
196
197 @Override
198 public ChoreService getChoreService() {
199 return null;
200 }
201 }
202 }