1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.zookeeper.lock;
21
22 import java.io.IOException;
23 import java.util.List;
24 import java.util.TreeSet;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.hadoop.hbase.classification.InterfaceAudience;
29 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
30 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
31
32
33
34
35 @InterfaceAudience.Private
36 public class ZKInterProcessWriteLock extends ZKInterProcessLockBase {
37
38 private static final Log LOG = LogFactory.getLog(ZKInterProcessWriteLock.class);
39
40 public ZKInterProcessWriteLock(ZooKeeperWatcher zooKeeperWatcher,
41 String znode, byte[] metadata, MetadataHandler handler) {
42 super(zooKeeperWatcher, znode, metadata, handler, WRITE_LOCK_CHILD_NODE_PREFIX);
43 }
44
45
46
47
48 @Override
49 protected String getLockPath(String createdZNode, List<String> children) throws IOException {
50 TreeSet<String> sortedChildren =
51 new TreeSet<String>(ZNodeComparator.COMPARATOR);
52 sortedChildren.addAll(children);
53 String pathToWatch = sortedChildren.lower(createdZNode);
54 if (pathToWatch != null) {
55 String nodeHoldingLock = sortedChildren.first();
56 String znode = ZKUtil.joinZNode(parentLockNode, nodeHoldingLock);
57 handleLockMetadata(znode);
58 }
59 return pathToWatch;
60 }
61 }