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