1 /**
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.apache.hadoop.hbase.client;
20 
21 import org.apache.hadoop.hbase.classification.InterfaceAudience;
22 import org.apache.hadoop.hbase.classification.InterfaceStability;
23 import org.apache.hadoop.hbase.HRegionLocation;
24 import org.apache.hadoop.hbase.TableName;
25 import org.apache.hadoop.hbase.util.Pair;
26 
27 import java.io.Closeable;
28 import java.io.IOException;
29 import java.util.List;
30 
31 /**
32  * Used to view region location information for a single HBase table.
33  * Obtain an instance from an {@link Connection}.
34  *
35  * @see ConnectionFactory
36  * @see Connection
37  * @see Table
38  * @since 0.99.0
39  */
40 @InterfaceAudience.Public
41 @InterfaceStability.Evolving
42 public interface RegionLocator extends Closeable {
43   /**
44    * Finds the region on which the given row is being served. Does not reload the cache.
45    * @param row Row to find.
46    * @return Location of the row.
47    * @throws IOException if a remote or network exception occurs
48    */
getRegionLocation(final byte [] row)49   public HRegionLocation getRegionLocation(final byte [] row) throws IOException;
50 
51   /**
52    * Finds the region on which the given row is being served.
53    * @param row Row to find.
54    * @param reload true to reload information or false to use cached information
55    * @return Location of the row.
56    * @throws IOException if a remote or network exception occurs
57    */
getRegionLocation(final byte [] row, boolean reload)58   public HRegionLocation getRegionLocation(final byte [] row, boolean reload)
59     throws IOException;
60 
61   /**
62    * Retrieves all of the regions associated with this table.
63    * @return a {@link List} of all regions associated with this table.
64    * @throws IOException if a remote or network exception occurs
65    */
getAllRegionLocations()66   public List<HRegionLocation> getAllRegionLocations()
67     throws IOException;
68 
69   /**
70    * Gets the starting row key for every region in the currently open table.
71    * <p>
72    * This is mainly useful for the MapReduce integration.
73    * @return Array of region starting row keys
74    * @throws IOException if a remote or network exception occurs
75    */
getStartKeys()76   public byte [][] getStartKeys() throws IOException;
77 
78   /**
79    * Gets the ending row key for every region in the currently open table.
80    * <p>
81    * This is mainly useful for the MapReduce integration.
82    * @return Array of region ending row keys
83    * @throws IOException if a remote or network exception occurs
84    */
getEndKeys()85   public byte[][] getEndKeys() throws IOException;
86 
87   /**
88    * Gets the starting and ending row keys for every region in the currently
89    * open table.
90    * <p>
91    * This is mainly useful for the MapReduce integration.
92    * @return Pair of arrays of region starting and ending row keys
93    * @throws IOException if a remote or network exception occurs
94    */
getStartEndKeys()95   public Pair<byte[][],byte[][]> getStartEndKeys() throws IOException;
96 
97   /**
98    * Gets the fully qualified table name instance of this table.
99    */
getName()100   TableName getName();
101 }
102