1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.master;
22
23 import org.apache.hadoop.hbase.HBaseClusterTestCase;
24 import org.apache.hadoop.hbase.HConstants;
25 import org.apache.hadoop.hbase.HRegionInfo;
26 import org.apache.hadoop.hbase.HServerAddress;
27 import org.apache.hadoop.hbase.HTableDescriptor;
28 import org.apache.hadoop.hbase.client.HTable;
29 import org.apache.hadoop.hbase.util.Bytes;
30
31 public class TestRegionManager extends HBaseClusterTestCase {
32 public void testGetFirstMetaRegionForRegionAfterMetaSplit()
33 throws Exception {
34 HTable meta = new HTable(HConstants.META_TABLE_NAME);
35 HMaster master = this.cluster.getMaster();
36 HServerAddress address = master.getMasterAddress();
37 HTableDescriptor tableDesc = new HTableDescriptor(Bytes.toBytes("_MY_TABLE_"));
38 HTableDescriptor metaTableDesc = meta.getTableDescriptor();
39
40 byte[] startKey0 = Bytes.toBytes("f");
41 byte[] endKey0 = Bytes.toBytes("h");
42 HRegionInfo regionInfo0 = new HRegionInfo(tableDesc, startKey0, endKey0);
43
44
45 HRegionInfo metaRegionInfo0 = new HRegionInfo(metaTableDesc, Bytes.toBytes(""), regionInfo0.getRegionName());
46 MetaRegion meta0 = new MetaRegion(address, metaRegionInfo0);
47
48 byte[] startKey1 = Bytes.toBytes("j");
49 byte[] endKey1 = Bytes.toBytes("m");
50 HRegionInfo regionInfo1 = new HRegionInfo(tableDesc, startKey1, endKey1);
51
52 HRegionInfo metaRegionInfo1 = new HRegionInfo(metaTableDesc, regionInfo0.getRegionName(), regionInfo1.getRegionName());
53 MetaRegion meta1 = new MetaRegion(address, metaRegionInfo1);
54
55
56
57 HRegionInfo metaRegionInfo2 = new HRegionInfo(metaTableDesc, regionInfo1.getRegionName(), Bytes.toBytes(""));
58 MetaRegion meta2 = new MetaRegion(address, metaRegionInfo2);
59
60 byte[] startKeyX = Bytes.toBytes("h");
61 byte[] endKeyX = Bytes.toBytes("j");
62 HRegionInfo regionInfoX = new HRegionInfo(tableDesc, startKeyX, endKeyX);
63
64
65 master.getRegionManager().offlineMetaRegionWithStartKey(startKey0);
66 master.getRegionManager().putMetaRegionOnline(meta0);
67 master.getRegionManager().putMetaRegionOnline(meta1);
68 master.getRegionManager().putMetaRegionOnline(meta2);
69
70
71
72
73
74 assertEquals(metaRegionInfo1.getStartKey(),
75 master.getRegionManager().getFirstMetaRegionForRegion(regionInfoX).getStartKey());
76 assertEquals(metaRegionInfo1.getRegionName(),
77 master.getRegionManager().getFirstMetaRegionForRegion(regionInfoX).getRegionName());
78 }
79 }