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.master.balancer;
21
22 import java.util.List;
23 import java.util.Map;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.hadoop.classification.InterfaceAudience;
28 import org.apache.hadoop.hbase.HRegionInfo;
29 import org.apache.hadoop.hbase.ServerName;
30 import org.jboss.netty.util.internal.ConcurrentHashMap;
31
32
33
34
35
36
37
38
39 @InterfaceAudience.Private
40 public class FavoredNodes {
41 protected static final Log LOG = LogFactory.getLog(
42 FavoredNodes.class.getName());
43
44
45 private Map<HRegionInfo, List<ServerName>> favoredNodesMap;
46
47 public static enum Position {
48 PRIMARY,
49 SECONDARY,
50 TERTIARY;
51 };
52
53 public FavoredNodes() {
54 favoredNodesMap = new ConcurrentHashMap<HRegionInfo, List<ServerName>>();
55 }
56
57
58
59
60
61
62 public synchronized void updateFavoredNodesMap(HRegionInfo region,
63 List<ServerName> servers) {
64 if (region == null || servers == null || servers.size() ==0)
65 return;
66 this.favoredNodesMap.put(region, servers);
67 }
68
69
70
71
72
73 public synchronized List<ServerName> getFavoredNodes(HRegionInfo region) {
74 return favoredNodesMap.get(region);
75 }
76
77
78
79
80
81
82
83
84 static Position getFavoredServerPosition(
85 List<ServerName> favoredNodes, ServerName server) {
86 if (favoredNodes == null || server == null ||
87 favoredNodes.size() != FavoredNodeAssignmentHelper.FAVORED_NODES_NUM) {
88 return null;
89 }
90 for (Position p : Position.values()) {
91 if (favoredNodes.get(p.ordinal()).equals(server)) {
92 return p;
93 }
94 }
95 return null;
96 }
97 }