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 java.io.IOException;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.hadoop.hbase.executor.RegionTransitionEventData;
27 import org.apache.hadoop.hbase.executor.HBaseEventHandler;
28 import org.apache.hadoop.hbase.master.HMaster;
29 import org.apache.hadoop.hbase.master.ServerManager;
30 import org.apache.hadoop.hbase.util.Writables;
31
32
33
34
35
36
37
38 public class MasterCloseRegionHandler extends HBaseEventHandler
39 {
40 private static final Log LOG = LogFactory.getLog(MasterCloseRegionHandler.class);
41
42 private String regionName;
43 protected byte[] serializedData;
44 RegionTransitionEventData hbEventData;
45 ServerManager serverManager;
46
47 public MasterCloseRegionHandler(HBaseEventType eventType,
48 ServerManager serverManager,
49 String serverName,
50 String regionName,
51 byte[] serializedData) {
52 super(false, serverName, eventType);
53 this.regionName = regionName;
54 this.serializedData = serializedData;
55 this.serverManager = serverManager;
56 }
57
58
59
60
61
62
63
64
65
66
67
68 @Override
69 public void process()
70 {
71 LOG.debug("Event = " + getHBEvent() + ", region = " + regionName);
72
73 handleRegionClosedEvent();
74 }
75
76 private void handleRegionClosedEvent() {
77 try {
78 if(hbEventData == null) {
79 hbEventData = new RegionTransitionEventData();
80 Writables.getWritable(serializedData, hbEventData);
81 }
82 } catch (IOException e) {
83 LOG.error("Could not deserialize additional args for Close region", e);
84 }
85
86
87 serverManager.processRegionClose(hbEventData.getHmsg().getRegionInfo());
88 LOG.info("Processed close of region " + hbEventData.getHmsg().getRegionInfo().getRegionNameAsString());
89 }
90
91 public String getRegionName() {
92 return regionName;
93 }
94 }