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;
21
22 import org.apache.hadoop.hbase.HConstants;
23 import org.apache.hadoop.hbase.HRegionInfo;
24 import org.apache.hadoop.hbase.HServerAddress;
25 import org.apache.hadoop.hbase.HServerInfo;
26 import org.apache.hadoop.hbase.client.Put;
27 import org.apache.hadoop.hbase.ipc.HRegionInterface;
28 import org.apache.hadoop.hbase.util.Bytes;
29 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper;
30
31 import java.io.IOException;
32
33
34
35
36
37
38 public class ProcessRegionOpen extends ProcessRegionStatusChange {
39 protected final HServerInfo serverInfo;
40
41
42
43
44
45
46 public ProcessRegionOpen(HMaster master, HServerInfo info,
47 HRegionInfo regionInfo) {
48 super(master, regionInfo);
49 if (info == null) {
50 throw new NullPointerException("HServerInfo cannot be null; " +
51 "hbase-958 debugging");
52 }
53 this.serverInfo = info;
54 }
55
56 @Override
57 public String toString() {
58 return "PendingOpenOperation from " + serverInfo.getServerName();
59 }
60
61 @Override
62 protected boolean process() throws IOException {
63
64 if (!metaRegionAvailable()) {
65
66
67
68
69 return true;
70 }
71 HRegionInterface server =
72 master.getServerConnection().getHRegionConnection(getMetaRegion().getServer());
73 LOG.info(regionInfo.getRegionNameAsString() + " open on " +
74 serverInfo.getServerName());
75
76
77 Put p = new Put(regionInfo.getRegionName());
78 p.add(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER,
79 Bytes.toBytes(serverInfo.getHostnamePort()));
80 p.add(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER,
81 Bytes.toBytes(serverInfo.getStartCode()));
82 server.put(metaRegionName, p);
83 LOG.info("Updated row " + regionInfo.getRegionNameAsString() +
84 " in region " + Bytes.toString(metaRegionName) + " with startcode=" +
85 serverInfo.getStartCode() + ", server=" + serverInfo.getHostnamePort());
86 synchronized (master.getRegionManager()) {
87 if (isMetaTable) {
88
89 MetaRegion m =
90 new MetaRegion(new HServerAddress(serverInfo.getServerAddress()),
91 regionInfo);
92 if (!master.getRegionManager().isInitialMetaScanComplete()) {
93
94 if (LOG.isDebugEnabled()) {
95 LOG.debug("Adding " + m.toString() + " to regions to scan");
96 }
97 master.getRegionManager().addMetaRegionToScan(m);
98 } else {
99
100 if (LOG.isDebugEnabled()) {
101 LOG.debug("Adding to onlineMetaRegions: " + m.toString());
102 }
103 master.getRegionManager().putMetaRegionOnline(m);
104
105
106 master.getRegionManager().metaScannerThread.triggerNow();
107 }
108 }
109
110
111
112 if(master.getRegionManager().
113 isOfflined(regionInfo.getRegionNameAsString())) {
114 LOG.warn("We opened a region while it was asked to be closed.");
115 } else {
116 master.getRegionManager().removeRegion(regionInfo);
117 }
118 ZooKeeperWrapper zkWrapper =
119 ZooKeeperWrapper.getInstance(master.getConfiguration(),
120 HMaster.class.getName());
121 zkWrapper.deleteUnassignedRegion(regionInfo.getEncodedName());
122 return true;
123 }
124 }
125
126 @Override
127 protected int getPriority() {
128 return 0;
129 }
130 }