1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.mob.mapreduce;
20
21 import java.util.List;
22 import java.util.SortedSet;
23 import java.util.TreeSet;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.master.TableLockManager;
27 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ServerName;
28 import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.TableLock;
29 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
30 import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener;
31 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
32 import org.apache.zookeeper.KeeperException;
33
34
35
36
37
38
39
40
41
42 @InterfaceAudience.Private
43 public class SweepJobNodeTracker extends ZooKeeperListener {
44
45 private String parentNode;
46 private String lockNodePrefix;
47 private String owner;
48 private String lockNode;
49
50 public SweepJobNodeTracker(ZooKeeperWatcher watcher, String parentNode, String owner) {
51 super(watcher);
52 this.parentNode = parentNode;
53 this.owner = owner;
54 this.lockNodePrefix = ZKUtil.joinZNode(parentNode, "write-");
55 }
56
57
58
59
60
61
62
63
64
65 public void start() throws KeeperException {
66 watcher.registerListener(this);
67 List<String> children = ZKUtil.listChildrenNoWatch(watcher, parentNode);
68 if (children != null && !children.isEmpty()) {
69
70 TreeSet<String> sortedChildren = new TreeSet<String>();
71 sortedChildren.addAll(children);
72
73 SortedSet<String> tails = sortedChildren.tailSet(lockNodePrefix);
74 if (!tails.isEmpty()) {
75 for (String tail : tails) {
76 String path = ZKUtil.joinZNode(parentNode, tail);
77 byte[] data = ZKUtil.getDataAndWatch(watcher, path);
78 TableLock lock = TableLockManager.fromBytes(data);
79 ServerName serverName = lock.getLockOwner();
80 org.apache.hadoop.hbase.ServerName sn = org.apache.hadoop.hbase.ServerName.valueOf(
81 serverName.getHostName(), serverName.getPort(), serverName.getStartCode());
82
83 if (owner.equals(sn.toString())) {
84 lockNode = path;
85 return;
86 }
87 }
88 }
89 }
90 System.exit(1);
91 }
92
93 @Override
94 public void nodeDeleted(String path) {
95
96 if (path.equals(lockNode)) {
97 System.exit(1);
98 }
99 }
100 }