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.handler;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.hadoop.hbase.HRegionInfo;
25 import org.apache.hadoop.hbase.Server;
26 import org.apache.hadoop.hbase.executor.EventHandler;
27 import org.apache.hadoop.hbase.master.AssignmentManager;
28
29
30
31
32
33
34
35
36
37 public class ClosedRegionHandler extends EventHandler implements TotesHRegionInfo {
38 private static final Log LOG = LogFactory.getLog(ClosedRegionHandler.class);
39 private final AssignmentManager assignmentManager;
40 private final HRegionInfo regionInfo;
41 private final ClosedPriority priority;
42
43 private enum ClosedPriority {
44 ROOT (1),
45 META (2),
46 USER (3);
47
48 private final int value;
49 ClosedPriority(int value) {
50 this.value = value;
51 }
52 public int getValue() {
53 return value;
54 }
55 };
56
57 public ClosedRegionHandler(Server server, AssignmentManager assignmentManager,
58 HRegionInfo regionInfo) {
59 super(server, EventType.RS_ZK_REGION_CLOSED);
60 this.assignmentManager = assignmentManager;
61 this.regionInfo = regionInfo;
62 if(regionInfo.isRootRegion()) {
63 priority = ClosedPriority.ROOT;
64 } else if(regionInfo.isMetaRegion()) {
65 priority = ClosedPriority.META;
66 } else {
67 priority = ClosedPriority.USER;
68 }
69 }
70
71 @Override
72 public int getPriority() {
73 return priority.getValue();
74 }
75
76 @Override
77 public HRegionInfo getHRegionInfo() {
78 return this.regionInfo;
79 }
80
81 @Override
82 public void process() {
83 LOG.debug("Handling CLOSED event for " + regionInfo.getEncodedName());
84
85 if (this.assignmentManager.getZKTable().
86 isDisablingOrDisabledTable(this.regionInfo.getTableDesc().getNameAsString())) {
87 assignmentManager.offlineDisabledRegion(regionInfo);
88 return;
89 }
90
91 assignmentManager.setOffline(regionInfo);
92 assignmentManager.assign(regionInfo, true);
93 }
94 }