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 import java.util.ArrayList;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.hadoop.hbase.HMsg;
28 import org.apache.hadoop.hbase.HServerInfo;
29 import org.apache.hadoop.hbase.executor.RegionTransitionEventData;
30 import org.apache.hadoop.hbase.executor.HBaseEventHandler;
31 import org.apache.hadoop.hbase.master.HMaster;
32 import org.apache.hadoop.hbase.master.ServerManager;
33 import org.apache.hadoop.hbase.util.Writables;
34
35
36
37
38
39
40
41
42
43
44 public class MasterOpenRegionHandler extends HBaseEventHandler {
45 private static final Log LOG = LogFactory.getLog(MasterOpenRegionHandler.class);
46
47 protected byte[] serializedData;
48 private String regionName;
49 private RegionTransitionEventData hbEventData;
50 ServerManager serverManager;
51
52 public MasterOpenRegionHandler(HBaseEventType eventType,
53 ServerManager serverManager,
54 String serverName,
55 String regionName,
56 byte[] serData) {
57 super(false, serverName, eventType);
58 this.regionName = regionName;
59 this.serializedData = serData;
60 this.serverManager = serverManager;
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74 @Override
75 public void process()
76 {
77 LOG.debug("Event = " + getHBEvent() + ", region = " + regionName);
78 if(this.getHBEvent() == HBaseEventType.RS2ZK_REGION_OPENING) {
79 handleRegionOpeningEvent();
80 }
81 else if(this.getHBEvent() == HBaseEventType.RS2ZK_REGION_OPENED) {
82 handleRegionOpenedEvent();
83 }
84 }
85
86 private void handleRegionOpeningEvent() {
87
88 LOG.debug("NO-OP call to handling region opening event");
89
90
91
92 }
93
94 private void handleRegionOpenedEvent() {
95 try {
96 if(hbEventData == null) {
97 hbEventData = new RegionTransitionEventData();
98 Writables.getWritable(serializedData, hbEventData);
99 }
100 } catch (IOException e) {
101 LOG.error("Could not deserialize additional args for Open region", e);
102 }
103 LOG.debug("RS " + hbEventData.getRsName() + " has opened region " + regionName);
104 HServerInfo serverInfo = serverManager.getServerInfo(hbEventData.getRsName());
105 ArrayList<HMsg> returnMsgs = new ArrayList<HMsg>();
106 serverManager.processRegionOpen(serverInfo, hbEventData.getHmsg().getRegionInfo(), returnMsgs);
107 if(returnMsgs.size() > 0) {
108 LOG.error("Open region tried to send message: " + returnMsgs.get(0).getType() +
109 " about " + returnMsgs.get(0).getRegionInfo().getRegionNameAsString());
110 }
111 }
112 }