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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 static boolean verifyRegionState(ZooKeeperWatcher zkw, HRegionInfo region, EventType expectedState)
70 throws KeeperException, DeserializationException {
71 String encoded = region.getEncodedName();
72
73 String node = ZKAssign.getNodeName(zkw, encoded);
74 zkw.syncOrTimeout(node);
75
76
77 byte [] existingBytes = null;
78 try {
79 existingBytes = ZKUtil.getDataAndWatch(zkw, node);
80 } catch (KeeperException.NoNodeException nne) {
81 return false;
82 } catch (KeeperException e) {
83 throw e;
84 }
85 if (existingBytes == null) return false;
86 RegionTransition rt = RegionTransition.parseFrom(existingBytes);
87 return rt.getEventType().equals(expectedState);
88 }
89 }