You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/09/19 13:42:12 UTC

[hbase] branch branch-2.1 updated: HBASE-23049 TableDescriptors#getAll should return the tables ordering by the name which contain namespace (#639)

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new b556b03  HBASE-23049 TableDescriptors#getAll should return the tables ordering by the name which contain namespace (#639)
b556b03 is described below

commit b556b039dda890b8566863e0e66372e9bd272b22
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Thu Sep 19 21:20:42 2019 +0800

    HBASE-23049 TableDescriptors#getAll should return the tables ordering by the name which contain namespace (#639)
    
    Signed-off-by: stack <st...@apache.org>
---
 .../org/apache/hadoop/hbase/TableDescriptors.java  |  5 +++--
 .../hadoop/hbase/master/TableStateManager.java     |  7 +++---
 .../hadoop/hbase/util/FSTableDescriptors.java      |  4 ++--
 .../hadoop/hbase/util/TestFSTableDescriptors.java  | 26 ++++++++++++++++++++++
 4 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/TableDescriptors.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/TableDescriptors.java
index 5787f66..2537e7f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/TableDescriptors.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/TableDescriptors.java
@@ -48,11 +48,12 @@ public interface TableDescriptors {
   /**
    * Get Map of all TableDescriptors. Populates the descriptor cache as a
    * side effect.
+   * Notice: the key of map is the table name which contains namespace. It was generated by
+   * {@link TableName#getNameWithNamespaceInclAsString()}.
    * @return Map of all descriptors.
    * @throws IOException
    */
-  Map<String, TableDescriptor> getAll()
-  throws IOException;
+  Map<String, TableDescriptor> getAll() throws IOException;
 
   /**
    * Add or update descriptor
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java
index 580e726..1eb0416 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java
@@ -271,7 +271,6 @@ public class TableStateManager {
 
   private void fixTableStates(TableDescriptors tableDescriptors, Connection connection)
       throws IOException {
-    Map<String, TableDescriptor> allDescriptors = tableDescriptors.getAll();
     Map<String, TableState> states = new HashMap<>();
     // NOTE: Full hbase:meta table scan!
     MetaTableAccessor.fullScanTables(connection, new MetaTableAccessor.Visitor() {
@@ -282,15 +281,15 @@ public class TableStateManager {
         return true;
       }
     });
-    for (Map.Entry<String, TableDescriptor> entry : allDescriptors.entrySet()) {
-      TableName tableName = TableName.valueOf(entry.getKey());
+    for (TableDescriptor tableDesc : tableDescriptors.getAll().values()) {
+      TableName tableName = tableDesc.getTableName();
       if (TableName.isMetaTableName(tableName)) {
         // This table is always enabled. No fixup needed. No entry in hbase:meta needed.
         // Call through to fixTableState though in case a super class wants to do something.
         fixTableState(new TableState(tableName, TableState.State.ENABLED));
         continue;
       }
-      TableState tableState = states.get(entry.getKey());
+      TableState tableState = states.get(tableName.getNameAsString());
       if (tableState == null) {
         LOG.warn(tableName + " has no table state in hbase:meta, assuming ENABLED");
         MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java
index 85292f8..0041950 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java
@@ -266,7 +266,7 @@ public class FSTableDescriptors implements TableDescriptors {
 
     if (fsvisited && usecache) {
       for (Map.Entry<TableName, TableDescriptor> entry: this.cache.entrySet()) {
-        tds.put(entry.getKey().toString(), entry.getValue());
+        tds.put(entry.getKey().getNameWithNamespaceInclAsString(), entry.getValue());
       }
       // add hbase:meta to the response
       tds.put(this.metaTableDescriptor.getTableName().getNameAsString(), metaTableDescriptor);
@@ -285,7 +285,7 @@ public class FSTableDescriptors implements TableDescriptors {
           allvisited = false;
           continue;
         } else {
-          tds.put(htd.getTableName().getNameAsString(), htd);
+          tds.put(htd.getTableName().getNameWithNamespaceInclAsString(), htd);
         }
         fsvisited = allvisited;
       }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSTableDescriptors.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSTableDescriptors.java
index 11c7bcd..a0c37f2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSTableDescriptors.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSTableDescriptors.java
@@ -306,7 +306,33 @@ public class TestFSTableDescriptors {
     assertEquals("getAll() didn't return all TableDescriptors, expected: " +
                    (count + 1) + " got: " + htds.getAll().size(),
                  count + 1, htds.getAll().size());
+  }
+
+  @Test
+  public void testGetAllOrdering() throws Exception {
+    final String name = "testGetAllOrdering";
+    FileSystem fs = FileSystem.get(UTIL.getConfiguration());
+    Path rootDir = new Path(UTIL.getDataTestDir(), name);
+    FSTableDescriptors tds = new FSTableDescriptorsTest(UTIL.getConfiguration(), fs, rootDir);
 
+    String[] tableNames = new String[] { "foo", "bar", "foo:bar", "bar:foo" };
+    for (String tableName : tableNames) {
+      tds.createTableDescriptor(
+          TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).build());
+    }
+
+    Map<String, TableDescriptor> tables = tds.getAll();
+    assertEquals(4, tables.size());
+
+    String[] tableNamesOrdered =
+        new String[] { "bar:foo", "default:bar", "default:foo", "foo:bar" };
+    int i = 0;
+    for (Map.Entry<String, TableDescriptor> entry : tables.entrySet()) {
+      assertEquals(tableNamesOrdered[i], entry.getKey());
+      assertEquals(tableNamesOrdered[i],
+          entry.getValue().getTableName().getNameWithNamespaceInclAsString());
+      i++;
+    }
   }
 
   @Test