Repository: hbase
Updated Branches:
  refs/heads/branch-1 f3f394739 -> acf691111


HBASE-11657 Put HTable region methods in an interface (Carter Page)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/acf69111
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/acf69111
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/acf69111

Branch: refs/heads/branch-1
Commit: acf691111411c91bc2a813a99db2f948f7066174
Parents: f3f3947
Author: stack <st...@apache.org>
Authored: Tue Aug 19 16:15:02 2014 -0700
Committer: stack <st...@apache.org>
Committed: Tue Aug 19 16:15:35 2014 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/HRegionLocation.java    |  8 +-
 .../hadoop/hbase/client/ConnectionAdapter.java  |  5 ++
 .../hadoop/hbase/client/ConnectionManager.java  |  8 ++
 .../apache/hadoop/hbase/client/HConnection.java | 16 +++-
 .../org/apache/hadoop/hbase/client/HTable.java  | 42 +++------
 .../hadoop/hbase/client/RegionLocator.java      | 89 ++++++++++++++++++++
 .../hbase/client/CoprocessorHConnection.java    |  5 ++
 .../hbase/client/HConnectionTestingUtility.java |  2 +-
 .../hadoop/hbase/client/TestFromClientSide.java |  2 +-
 9 files changed, 143 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/HRegionLocation.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/HRegionLocation.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/HRegionLocation.java
index 05b4ac1..7872f82 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/HRegionLocation.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/HRegionLocation.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hbase;
 
 import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.hbase.util.Addressing;
 
 /**
@@ -31,10 +32,11 @@ import org.apache.hadoop.hbase.util.Addressing;
  * On a big cluster, each client will have thousands of instances of this 
object, often
  *  100 000 of them if not million. It's important to keep the object size as 
small
  *  as possible.
- * <br>This interface has been marked InterfaceAudience.Public in 0.96 and 
0.98, it is
- * no longer the case.
+ *
+ * <br>This interface has been marked InterfaceAudience.Public in 0.96 and 
0.98.
  */
-@InterfaceAudience.Private
+@InterfaceAudience.Public
+@InterfaceStability.Evolving
 public class HRegionLocation implements Comparable<HRegionLocation> {
   private final HRegionInfo regionInfo;
   private final ServerName serverName;

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
index c57064b..9d1570d 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
@@ -112,6 +112,11 @@ class ConnectionAdapter implements ClusterConnection {
   }
 
   @Override
+  public RegionLocator getRegionLocator(TableName tableName) throws 
IOException {
+    return wrappedConnection.getRegionLocator(tableName);
+  }
+
+  @Override
   public Admin getAdmin() throws IOException {
     return wrappedConnection.getAdmin();
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
index ad18e23..0813745 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
@@ -714,6 +714,14 @@ class ConnectionManager {
     }
 
     @Override
+    public RegionLocator getRegionLocator(TableName tableName) throws 
IOException {
+      if (managed) {
+        throw new IOException("The connection has to be unmanaged.");
+      }
+      return new HTable(tableName, this, getBatchPool());
+    }
+
+    @Override
     public Admin getAdmin() throws IOException {
       if (managed) {
         throw new IOException("The connection has to be unmanaged.");

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
index 77e9a5e..cd11a52 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
@@ -154,11 +154,25 @@ public interface HConnection extends Abortable, Closeable 
{
   public HTableInterface getTable(TableName tableName, ExecutorService pool)  
throws IOException;
 
   /**
+   * Retrieve a RegionLocator implementation to inspect region information on 
a table. The returned
+   * RegionLocator is not thread-safe, so a new instance should be created for 
each using thread.
+   *
+   * This is a lightweight operation.  Pooling or caching of the returned 
RegionLocator is neither
+   * required nor desired.
+   *
+   * RegionLocator needs to be unmanaged
+   * (created with {@link HConnectionManager#createConnection(Configuration)}).
+   *
+   * @param tableName Name of the table who's region is to be examined
+   * @return A RegionLocator instance
+   */
+  public RegionLocator getRegionLocator(TableName tableName) throws 
IOException;
+
+  /**
    * Retrieve an Admin implementation to administer an HBase cluster.
    * The returned Admin is not guaranteed to be thread-safe.  A new instance 
should be created for
    * each using thread.  This is a lightweight operation.  Pooling or caching 
of the returned
    * Admin is not recommended.  Note that HConnection needs to be unmanaged
-   * (created with {@link HConnectionManager#createConnection(Configuration)}).
    *
    * @return an Admin instance for cluster administration
    */

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
index 1265a5f..91702df 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
@@ -123,7 +123,7 @@ import com.google.protobuf.ServiceException;
  */
 @InterfaceAudience.Public
 @InterfaceStability.Stable
-public class HTable implements HTableInterface {
+public class HTable implements HTableInterface, RegionLocator {
   private static final Log LOG = LogFactory.getLog(HTable.class);
   protected ClusterConnection connection;
   private final TableName tableName;
@@ -498,30 +498,27 @@ public class HTable implements HTableInterface {
    * @param row Row to find.
    * @return The location of the given row.
    * @throws IOException if a remote or network exception occurs
+   * @deprecated Use {@link RegionLocator#getRegionLocation(byte[])}
    */
+  @Deprecated
   public HRegionLocation getRegionLocation(final String row)
   throws IOException {
     return connection.getRegionLocation(tableName, Bytes.toBytes(row), false);
   }
 
   /**
-   * Finds the region on which the given row is being served. Does not reload 
the cache.
-   * @param row Row to find.
-   * @return Location of the row.
-   * @throws IOException if a remote or network exception occurs
+   * {@inheritDoc}
    */
+  @Override
   public HRegionLocation getRegionLocation(final byte [] row)
   throws IOException {
     return connection.getRegionLocation(tableName, row, false);
   }
 
   /**
-   * Finds the region on which the given row is being served.
-   * @param row Row to find.
-   * @param reload true to reload information or false to use cached 
information
-   * @return Location of the row.
-   * @throws IOException if a remote or network exception occurs
+   * {@inheritDoc}
    */
+  @Override
   public HRegionLocation getRegionLocation(final byte [] row, boolean reload)
   throws IOException {
     return connection.getRegionLocation(tableName, row, reload);
@@ -599,36 +596,25 @@ public class HTable implements HTableInterface {
   }
 
   /**
-   * Gets the starting row key for every region in the currently open table.
-   * <p>
-   * This is mainly useful for the MapReduce integration.
-   * @return Array of region starting row keys
-   * @throws IOException if a remote or network exception occurs
+   * {@inheritDoc}
    */
+  @Override
   public byte [][] getStartKeys() throws IOException {
     return getStartEndKeys().getFirst();
   }
 
   /**
-   * Gets the ending row key for every region in the currently open table.
-   * <p>
-   * This is mainly useful for the MapReduce integration.
-   * @return Array of region ending row keys
-   * @throws IOException if a remote or network exception occurs
+   * {@inheritDoc}
    */
+  @Override
   public byte[][] getEndKeys() throws IOException {
     return getStartEndKeys().getSecond();
   }
 
   /**
-   * Gets the starting and ending row keys for every region in the currently
-   * open table.
-   * <p>
-   * This is mainly useful for the MapReduce integration.
-   * @return Pair of arrays of region starting and ending row keys
-   * @throws IOException if a remote or network exception occurs
+   * {@inheritDoc}
    */
-  // TODO: these are not in HTableInterface. Should we add them there or move 
these to HBaseAdmin?
+  @Override
   public Pair<byte[][],byte[][]> getStartEndKeys() throws IOException {
 
     List<RegionLocations> regions = listRegionLocations();
@@ -661,7 +647,7 @@ public class HTable implements HTableInterface {
    */
   @Deprecated
   public NavigableMap<HRegionInfo, ServerName> getRegionLocations() throws 
IOException {
-    // TODO: Odd that this returns a Map of HRI to SN whereas 
getRegionLocation, singular, returns an HRegionLocation.
+    // TODO: Odd that this returns a Map of HRI to SN whereas 
getRegionLocator, singular, returns an HRegionLocation.
     return MetaScanner.allTableRegions(getConfiguration(), this.connection, 
getName(), false);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
new file mode 100644
index 0000000..51156a9
--- /dev/null
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
@@ -0,0 +1,89 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.client;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.util.Pair;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+/**
+ * Used to view region location information for a single HBase table.
+ * Obtain an instance from an {@link HConnection}.
+ *
+ * @since 0.99.0
+ */
+@InterfaceAudience.Public
+@InterfaceStability.Evolving
+public interface RegionLocator extends Closeable {
+  /**
+   * Finds the region on which the given row is being served. Does not reload 
the cache.
+   * @param row Row to find.
+   * @return Location of the row.
+   * @throws IOException if a remote or network exception occurs
+   */
+  public HRegionLocation getRegionLocation(final byte [] row) throws 
IOException;
+
+  /**
+   * Finds the region on which the given row is being served.
+   * @param row Row to find.
+   * @param reload true to reload information or false to use cached 
information
+   * @return Location of the row.
+   * @throws IOException if a remote or network exception occurs
+   */
+  public HRegionLocation getRegionLocation(final byte [] row, boolean reload)
+    throws IOException;
+
+  /**
+   * Gets the starting row key for every region in the currently open table.
+   * <p>
+   * This is mainly useful for the MapReduce integration.
+   * @return Array of region starting row keys
+   * @throws IOException if a remote or network exception occurs
+   */
+  public byte [][] getStartKeys() throws IOException;
+
+  /**
+   * Gets the ending row key for every region in the currently open table.
+   * <p>
+   * This is mainly useful for the MapReduce integration.
+   * @return Array of region ending row keys
+   * @throws IOException if a remote or network exception occurs
+   */
+  public byte[][] getEndKeys() throws IOException;
+
+  /**
+   * Gets the starting and ending row keys for every region in the currently
+   * open table.
+   * <p>
+   * This is mainly useful for the MapReduce integration.
+   * @return Pair of arrays of region starting and ending row keys
+   * @throws IOException if a remote or network exception occurs
+   */
+  public Pair<byte[][],byte[][]> getStartEndKeys() throws IOException;
+
+  /**
+   * Gets the fully qualified table name instance of this table.
+   */
+  TableName getName();
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java
index a512f83..91e1f2a 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java
@@ -141,6 +141,11 @@ class CoprocessorHConnection implements ClusterConnection {
   }
 
   @Override
+  public RegionLocator getRegionLocator(TableName tableName) throws 
IOException {
+    return delegate.getRegionLocator(tableName);
+  }
+
+  @Override
   public Admin getAdmin() throws IOException { return delegate.getAdmin(); }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
index 18aad66..aeb8646 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
@@ -83,7 +83,7 @@ public class HConnectionTestingUtility {
    * @param sn ServerName to include in the region location returned by this
    * <code>connection</code>
    * @param hri HRegionInfo to include in the location returned when
-   * getRegionLocation is called on the mocked connection
+   * getRegionLocator is called on the mocked connection
    * @return Mock up a connection that returns a {@link Configuration} when
    * {@link HConnection#getConfiguration()} is called, a 'location' when
    * {@link HConnection#getRegionLocation(org.apache.hadoop.hbase.TableName, 
byte[], boolean)} is called,

http://git-wip-us.apache.org/repos/asf/hbase/blob/acf69111/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
index 975140c..b59db4e 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
@@ -5167,7 +5167,7 @@ public class TestFromClientSide {
 
   @Test
   /**
-   * Tests the non cached version of getRegionLocation by moving a region.
+   * Tests the non cached version of getRegionLocator by moving a region.
    */
   public void testNonCachedGetRegionLocation() throws Exception {
     // Test Initialization.

Reply via email to