1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.master;
19
20 import static org.junit.Assert.assertNotSame;
21
22 import org.apache.hadoop.hbase.exceptions.DeserializationException;
23 import org.apache.hadoop.hbase.HRegionInfo;
24 import org.apache.hadoop.hbase.RegionTransition;
25 import org.apache.hadoop.hbase.ServerName;
26 import org.apache.hadoop.hbase.executor.EventType;
27 import org.apache.hadoop.hbase.master.RegionState.State;
28 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
29 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
30 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
31 import org.apache.zookeeper.KeeperException;
32
33
34
35
36 public class Mocking {
37
38 static void waitForRegionFailedToCloseAndSetToPendingClose(
39 AssignmentManager am, HRegionInfo hri) throws InterruptedException {
40
41
42 boolean wait = true;
43 while (wait) {
44 RegionState state = am.getRegionStates().getRegionState(hri);
45 if (state != null && state.isFailedClose()){
46 am.getRegionStates().updateRegionState(hri, State.PENDING_CLOSE);
47 wait = false;
48 } else {
49 Thread.sleep(1);
50 }
51 }
52 }
53
54 static void waitForRegionPendingOpenInRIT(AssignmentManager am, String encodedName)
55 throws InterruptedException {
56
57
58
59
60
61
62
63 boolean wait = true;
64 while (wait) {
65 RegionState state = am.getRegionStates()
66 .getRegionsInTransition().get(encodedName);
67 if (state != null && state.isPendingOpen()){
68 wait = false;
69 } else {
70 Thread.sleep(1);
71 }
72 }
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 static boolean verifyRegionState(ZooKeeperWatcher zkw, HRegionInfo region, EventType expectedState)
91 throws KeeperException, DeserializationException {
92 String encoded = region.getEncodedName();
93
94 String node = ZKAssign.getNodeName(zkw, encoded);
95 zkw.sync(node);
96
97
98 byte [] existingBytes = null;
99 try {
100 existingBytes = ZKUtil.getDataAndWatch(zkw, node);
101 } catch (KeeperException.NoNodeException nne) {
102 return false;
103 } catch (KeeperException e) {
104 throw e;
105 }
106 if (existingBytes == null) return false;
107 RegionTransition rt = RegionTransition.parseFrom(existingBytes);
108 return rt.getEventType().equals(expectedState);
109 }
110 }