From d5033fd3502e24af358dd208b39769bcaee2dc3a Mon Sep 17 00:00:00 2001 From: tedyu Date: Mon, 4 Sep 2017 07:52:57 -0700 Subject: [PATCH] HBASE-18743 HFiles in use by a table which has the same name and namespace with a default table cloned from snapshot may be deleted when that snapshot and default table are deleted (wenbang) --- .../main/java/org/apache/hadoop/hbase/TableName.java | 2 +- .../java/org/apache/hadoop/hbase/TestNamespace.java | 12 ++++++++++++ .../org/apache/hadoop/hbase/io/TestHFileLink.java | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java index 198a5eb7254..9904c7893e5 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java @@ -388,7 +388,7 @@ public final class TableName implements Comparable { for (TableName tn : tableCache) { if (qualifierAsString.equals(tn.getQualifierAsString()) && - namespaceAsString.equals(tn.getNameAsString())) { + namespaceAsString.equals(tn.getNamespaceAsString())) { return tn; } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestNamespace.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestNamespace.java index f0dc132a0af..662cba63b23 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestNamespace.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestNamespace.java @@ -393,4 +393,16 @@ public class TestNamespace { fail("Should have thrown exception " + exceptionClass); } + @Test + public void testValueOfNamespaceAndQualifier() { + TableName name0 = TableName.valueOf("table"); + TableName name1 = TableName.valueOf("table", "table"); + assertEquals(NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR, name0.getNamespaceAsString()); + assertEquals("table", name0.getQualifierAsString()); + assertEquals("table", name0.getNameAsString()); + assertEquals("table", name1.getNamespaceAsString()); + assertEquals("table", name1.getQualifierAsString()); + assertEquals("table:table", name1.getNameAsString()); + } + } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHFileLink.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHFileLink.java index 044975dee71..e4d09c3614e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHFileLink.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHFileLink.java @@ -102,7 +102,8 @@ public class TestHFileLink { TableName.NAMESPACE_DELIM, '=') + "=" + encodedRegion + "-" + storeFileName; TableName tableNames[] = {TableName.valueOf("tableName1"), - TableName.valueOf("ns", "tableName2")}; + TableName.valueOf("ns", "tableName2"), + TableName.valueOf("refTable:refTable")}; for( TableName tableName : tableNames) { Path tableDir = FSUtils.getTableDir(rootDir, tableName); @@ -112,7 +113,7 @@ public class TestHFileLink { //Verify back reference creation assertEquals(encodedRegion+"."+ tableName.getNameAsString().replace(TableName.NAMESPACE_DELIM, '='), - HFileLink.createBackReferenceName(tableName.getNameAsString(), + HFileLink.createBackReferenceName(FSUtils.getTableName(tableDir).getNameAsString(), encodedRegion)); //verify parsing back reference