1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.master.handler;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.hadoop.classification.InterfaceAudience;
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.executor.EventType;
28 import org.apache.hadoop.hbase.master.AssignmentManager;
29 import org.apache.hadoop.hbase.master.RegionState;
30
31
32
33
34
35
36
37
38
39 @InterfaceAudience.Private
40 public class ClosedRegionHandler extends EventHandler implements TotesHRegionInfo {
41 private static final Log LOG = LogFactory.getLog(ClosedRegionHandler.class);
42 private final AssignmentManager assignmentManager;
43 private final HRegionInfo regionInfo;
44 private final ClosedPriority priority;
45
46 private enum ClosedPriority {
47 META (1),
48 USER (2);
49
50 private final int value;
51 ClosedPriority(int value) {
52 this.value = value;
53 }
54 public int getValue() {
55 return value;
56 }
57 };
58
59 public ClosedRegionHandler(Server server, AssignmentManager assignmentManager,
60 HRegionInfo regionInfo) {
61 super(server, EventType.RS_ZK_REGION_CLOSED);
62 this.assignmentManager = assignmentManager;
63 this.regionInfo = regionInfo;
64 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 String toString() {
83 String name = "UnknownServerName";
84 if(server != null && server.getServerName() != null) {
85 name = server.getServerName().toString();
86 }
87 return getClass().getSimpleName() + "-" + name + "-" + getSeqid();
88 }
89
90 @Override
91 public void process() {
92 LOG.debug("Handling CLOSED event for " + regionInfo.getEncodedName());
93
94 if (this.assignmentManager.getZKTable().
95 isDisablingOrDisabledTable(this.regionInfo.getTable())) {
96 assignmentManager.offlineDisabledRegion(regionInfo);
97 return;
98 }
99
100 assignmentManager.getRegionStates().updateRegionState(
101 regionInfo, RegionState.State.CLOSED);
102
103 assignmentManager.removeClosedRegion(regionInfo);
104 assignmentManager.assign(regionInfo, true);
105 }
106 }