You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2013/08/14 02:34:30 UTC

svn commit: r1513703 [1/3] - in /hbase/trunk: hbase-client/src/main/java/org/apache/hadoop/hbase/client/ hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ hbase-protoco...

Author: apurtell
Date: Wed Aug 14 00:34:30 2013
New Revision: 1513703

URL: http://svn.apache.org/r1513703
Log:
HBASE-9182. Allow non-admin users to list all table names

Modified:
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
    hbase/trunk/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterAdminProtos.java
    hbase/trunk/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterMonitorProtos.java
    hbase/trunk/hbase-protocol/src/main/protobuf/MasterAdmin.proto
    hbase/trunk/hbase-protocol/src/main/protobuf/MasterMonitor.proto
    hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableNamespaceManager.java
    hbase/trunk/hbase-server/src/main/ruby/hbase/admin.rb
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestNamespace.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1513703&r1=1513702&r2=1513703&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Wed Aug 14 00:34:30 2013
@@ -321,6 +321,52 @@ public class HBaseAdmin implements Abort
     return listTables(Pattern.compile(regex));
   }
 
+  /**
+   * List all of the names of userspace tables.
+   * @return String[] table names
+   * @throws IOException if a remote or network exception occurs
+   */
+  @Deprecated
+  public String[] getTableNames() throws IOException {
+    return this.connection.getTableNames();
+  }
+
+  /**
+   * List all of the names of userspace tables matching the given regular expression.
+   * @param pattern The regular expression to match against
+   * @return String[] table names
+   * @throws IOException if a remote or network exception occurs
+   */
+  @Deprecated
+  public String[] getTableNames(Pattern pattern) throws IOException {
+    List<String> matched = new ArrayList<String>();
+    for (String name: this.connection.getTableNames()) {
+      if (pattern.matcher(name).matches()) {
+        matched.add(name);
+      }
+    }
+    return matched.toArray(new String[matched.size()]);
+  }
+
+  /**
+   * List all of the names of userspace tables matching the given regular expression.
+   * @param regex The regular expression to match against
+   * @return String[] table names
+   * @throws IOException if a remote or network exception occurs
+   */
+  @Deprecated
+  public String[] getTableNames(String regex) throws IOException {
+    return getTableNames(Pattern.compile(regex));
+  }
+
+  /**
+   * List all of the names of userspace tables.
+   * @return TableName[] table names
+   * @throws IOException if a remote or network exception occurs
+   */
+  public TableName[] listTableNames() throws IOException {
+    return this.connection.listTableNames();
+  }
 
   /**
    * Method for getting the tableDescriptor
@@ -2155,14 +2201,14 @@ public class HBaseAdmin implements Abort
    * @return A descriptor
    * @throws IOException
    */
-  public HTableDescriptor[] getTableDescriptorsByNamespace(final String name) throws IOException {
+  public HTableDescriptor[] listTableDescriptorsByNamespace(final String name) throws IOException {
     return
         executeCallable(new MasterAdminCallable<HTableDescriptor[]>(getConnection()) {
           @Override
           public HTableDescriptor[] call() throws Exception {
             List<TableSchema> list =
-                masterAdmin.getTableDescriptorsByNamespace(null,
-                    MasterAdminProtos.GetTableDescriptorsByNamespaceRequest.newBuilder()
+                masterAdmin.listTableDescriptorsByNamespace(null,
+                    MasterAdminProtos.ListTableDescriptorsByNamespaceRequest.newBuilder()
                         .setNamespaceName(name).build())
                             .getTableSchemaList();
             HTableDescriptor[] res = new HTableDescriptor[list.size()];
@@ -2176,6 +2222,31 @@ public class HBaseAdmin implements Abort
   }
 
   /**
+   * Get list of table names by namespace
+   * @param name namespace name
+   * @return The list of table names in the namespace
+   * @throws IOException
+   */
+  public TableName[] listTableNamesByNamespace(final String name) throws IOException {
+    return
+        executeCallable(new MasterAdminCallable<TableName[]>(getConnection()) {
+          @Override
+          public TableName[] call() throws Exception {
+            List<HBaseProtos.TableName> tableNames =
+                masterAdmin.listTableNamesByNamespace(null,
+                    MasterAdminProtos.ListTableNamesByNamespaceRequest.newBuilder()
+                        .setNamespaceName(name).build())
+                .getTableNameList();
+            TableName[] result = new TableName[tableNames.size()];
+            for (int i = 0; i < tableNames.size(); i++) {
+              result[i] = ProtobufUtil.toTableName(tableNames.get(i));
+            }
+            return result;
+          }
+        });
+  }
+
+  /**
    * Check to see if HBase is running. Throw an exception if not.
    * We consider that HBase is running if ZooKeeper and Master are running.
    *
@@ -2283,7 +2354,6 @@ public class HBaseAdmin implements Abort
     return getTableDescriptorsByTableName(tableNames);
   }
 
-
   /**
    * Roll the log writer. That is, start writing log messages to a new file.
    *

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java?rev=1513703&r1=1513702&r2=1513703&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java Wed Aug 14 00:34:30 2013
@@ -220,6 +220,15 @@ public interface HConnection extends Abo
    */
   HTableDescriptor[] listTables() throws IOException;
 
+  // This is a bit ugly - We call this getTableNames in 0.94 and the
+  // successor function, returning TableName, listTableNames in later versions
+  // because Java polymorphism doesn't consider return value types
+
+  @Deprecated
+  String[] getTableNames() throws IOException;
+
+  TableName[] listTableNames() throws IOException;
+
   /**
    * @param tableName table name
    * @return table metadata

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=1513703&r1=1513702&r2=1513703&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java Wed Aug 14 00:34:30 2013
@@ -86,9 +86,13 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos
     .ListNamespaceDescriptorsRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos
-    .GetTableDescriptorsByNamespaceResponse;
+    .ListTableDescriptorsByNamespaceResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos
-    .GetTableDescriptorsByNamespaceRequest;
+    .ListTableDescriptorsByNamespaceRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos
+    .ListTableNamesByNamespaceResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos
+    .ListTableNamesByNamespaceRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
@@ -148,6 +152,8 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableNamesRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableNamesResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.MasterMonitorService;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
@@ -2114,8 +2120,14 @@ public class HConnectionManager {
         }
 
         @Override
-        public GetTableDescriptorsByNamespaceResponse getTableDescriptorsByNamespace(RpcController controller, GetTableDescriptorsByNamespaceRequest request) throws ServiceException {
-          return stub.getTableDescriptorsByNamespace(controller, request);
+        public ListTableDescriptorsByNamespaceResponse listTableDescriptorsByNamespace(RpcController controller, ListTableDescriptorsByNamespaceRequest request) throws ServiceException {
+          return stub.listTableDescriptorsByNamespace(controller, request);
+        }
+
+        @Override
+        public ListTableNamesByNamespaceResponse listTableNamesByNamespace(RpcController controller,
+              ListTableNamesByNamespaceRequest request) throws ServiceException {
+          return stub.listTableNamesByNamespace(controller, request);
         }
 
         @Override
@@ -2160,6 +2172,13 @@ public class HConnectionManager {
         }
 
         @Override
+        public GetTableNamesResponse getTableNames(
+            RpcController controller, GetTableNamesRequest request)
+            throws ServiceException {
+          return stub.getTableNames(controller, request);
+        }
+
+        @Override
         public GetClusterStatusResponse getClusterStatus(
             RpcController controller, GetClusterStatusRequest request)
             throws ServiceException {
@@ -2620,6 +2639,30 @@ public class HConnectionManager {
     }
 
     @Override
+    public String[] getTableNames() throws IOException {
+      TableName[] tableNames = listTableNames();
+      String result[] = new String[tableNames.length];
+      for (int i = 0; i < tableNames.length; i++) {
+        result[i] = tableNames[i].getNameAsString();
+      }
+      return result;
+    }
+
+    @Override
+    public TableName[] listTableNames() throws IOException {
+      MasterMonitorKeepAliveConnection master = getKeepAliveMasterMonitorService();
+      try {
+        return ProtobufUtil.getTableNameArray(master.getTableNames(null,
+            GetTableNamesRequest.newBuilder().build())
+          .getTableNamesList());
+      } catch (ServiceException se) {
+        throw ProtobufUtil.getRemoteException(se);
+      } finally {
+        master.close();
+      }
+    }
+
+    @Override
     public HTableDescriptor[] getHTableDescriptorsByTableName(
         List<TableName> tableNames) throws IOException {
       if (tableNames == null || tableNames.isEmpty()) return new HTableDescriptor[0];

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java?rev=1513703&r1=1513702&r2=1513703&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java Wed Aug 14 00:34:30 2013
@@ -164,6 +164,16 @@ public class HConnectionWrapper implemen
   }
 
   @Override
+  public String[] getTableNames() throws IOException {
+    return hconnection.getTableNames();
+  }
+
+  @Override
+  public TableName[] listTableNames() throws IOException {
+    return hconnection.listTableNames();
+  }
+
+  @Override
   public HTableDescriptor getHTableDescriptor(TableName tableName) throws IOException {
     return hconnection.getHTableDescriptor(tableName);
   }

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java?rev=1513703&r1=1513702&r2=1513703&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java Wed Aug 14 00:34:30 2013
@@ -2251,4 +2251,16 @@ public final class ProtobufUtil {
         .setNamespace(ByteString.copyFrom(tableName.getNamespace()))
         .setQualifier(ByteString.copyFrom(tableName.getQualifier())).build();
   }
+
+  public static TableName[] getTableNameArray(List<HBaseProtos.TableName> tableNamesList) {
+    if (tableNamesList == null) {
+      return new TableName[0];
+    }
+    TableName[] tableNames = new TableName[tableNamesList.size()];
+    for (int i = 0; i < tableNamesList.size(); i++) {
+      tableNames[i] = toTableName(tableNamesList.get(i));
+    }
+    return tableNames;
+  }
+
 }