1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package org.apache.hadoop.hbase;
20
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.apache.hadoop.hbase.client.Result;
27 import org.apache.hadoop.hbase.util.Bytes;
28
29 /**
30 * Mocking utility for common hbase:meta functionality
31 */
32 public class MetaMockingUtil {
33
34 /**
35 * Returns a Result object constructed from the given region information simulating
36 * a catalog table result.
37 * @param region the HRegionInfo object or null
38 * @return A mocked up Result that fakes a Get on a row in the <code>hbase:meta</code> table.
39 * @throws IOException
40 */
41 public static Result getMetaTableRowResult(final HRegionInfo region)
42 throws IOException {
43 return getMetaTableRowResult(region, null, null, null);
44 }
45
46 /**
47 * Returns a Result object constructed from the given region information simulating
48 * a catalog table result.
49 * @param region the HRegionInfo object or null
50 * @param sn to use making startcode and server hostname:port in meta or null
51 * @return A mocked up Result that fakes a Get on a row in the <code>hbase:meta</code> table.
52 * @throws IOException
53 */
54 public static Result getMetaTableRowResult(final HRegionInfo region, final ServerName sn)
55 throws IOException {
56 return getMetaTableRowResult(region, sn, null, null);
57 }
58
59 /**
60 * Returns a Result object constructed from the given region information simulating
61 * a catalog table result.
62 * @param region the HRegionInfo object or null
63 * @param sn to use making startcode and server hostname:port in meta or null
64 * @param splita daughter region or null
65 * @param splitb daughter region or null
66 * @return A mocked up Result that fakes a Get on a row in the <code>hbase:meta</code> table.
67 * @throws IOException
68 */
69 public static Result getMetaTableRowResult(HRegionInfo region, final ServerName sn,
70 HRegionInfo splita, HRegionInfo splitb) throws IOException {
71 List<Cell> kvs = new ArrayList<Cell>();
72 if (region != null) {
73 kvs.add(new KeyValue(
74 region.getRegionName(),
75 HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER,
76 region.toByteArray()));
77 }
78
79 if (sn != null) {
80 kvs.add(new KeyValue(region.getRegionName(),
81 HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER,
82 Bytes.toBytes(sn.getHostAndPort())));
83 kvs.add(new KeyValue(region.getRegionName(),
84 HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER,
85 Bytes.toBytes(sn.getStartcode())));
86 }
87
88 if (splita != null) {
89 kvs.add(new KeyValue(
90 region.getRegionName(),
91 HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER,
92 splita.toByteArray()));
93 }
94
95 if (splitb != null) {
96 kvs.add(new KeyValue(
97 region.getRegionName(),
98 HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER,
99 splitb.toByteArray()));
100 }
101
102 //important: sort the kvs so that binary search work
103 Collections.sort(kvs, KeyValue.META_COMPARATOR);
104
105 return Result.create(kvs);
106 }
107
108 /**
109 * @param sn ServerName to use making startcode and server in meta
110 * @param hri Region to serialize into HRegionInfo
111 * @return A mocked up Result that fakes a Get on a row in the <code>hbase:meta</code> table.
112 * @throws IOException
113 */
114 public static Result getMetaTableRowResultAsSplitRegion(final HRegionInfo hri,
115 final ServerName sn) throws IOException {
116 hri.setOffline(true);
117 hri.setSplit(true);
118 return getMetaTableRowResult(hri, sn);
119 }
120
121 }