You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2017/09/06 17:01:09 UTC
hbase git commit: HBASE-18444 Add support for specifying custom meta
table suffix (Ajay Jadhav)
Repository: hbase
Updated Branches:
refs/heads/HBASE-18477 [created] 8fb2c9a46
HBASE-18444 Add support for specifying custom meta table suffix (Ajay Jadhav)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8fb2c9a4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8fb2c9a4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8fb2c9a4
Branch: refs/heads/HBASE-18477
Commit: 8fb2c9a468cceebc95febc1e7259d8e40fdd0271
Parents: 7fb52e7
Author: tedyu <yu...@gmail.com>
Authored: Wed Sep 6 10:00:55 2017 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Wed Sep 6 10:00:55 2017 -0700
----------------------------------------------------------------------
.../java/org/apache/hadoop/hbase/TableName.java | 39 ++++++++++++++--
.../apache/hadoop/hbase/util/TestTableName.java | 47 +++++++++++++++++++-
2 files changed, 80 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8fb2c9a4/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java
----------------------------------------------------------------------
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 3477098..9addcd4 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
@@ -24,9 +24,13 @@ import java.util.Arrays;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.KeyValue.KVComparator;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.KeyValue.KVComparator;
/**
* Immutable POJO class for representing a table name.
@@ -54,6 +58,7 @@ import org.apache.hadoop.hbase.KeyValue.KVComparator;
*/
@InterfaceAudience.Public
public final class TableName implements Comparable<TableName> {
+ private static final Log LOG = LogFactory.getLog(TableName.class);
/** See {@link #createTableNameIfNecessary(ByteBuffer, ByteBuffer)} */
private static final Set<TableName> tableCache = new CopyOnWriteArraySet<>();
@@ -77,9 +82,11 @@ public final class TableName implements Comparable<TableName> {
"(?:(?:(?:"+VALID_NAMESPACE_REGEX+"\\"+NAMESPACE_DELIM+")?)" +
"(?:"+VALID_TABLE_QUALIFIER_REGEX+"))";
- /** The hbase:meta table's name. */
- public static final TableName META_TABLE_NAME =
- valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "meta");
+ public static final String DEFAULT_META_TABLE_NAME_STR = "meta";
+ public static final String META_TABLE_SUFFIX = "hbase.meta.table.suffix";
+
+ /** The meta table's name. */
+ public static final TableName META_TABLE_NAME = getMetaTableName(HBaseConfiguration.create());
/** The Namespace table's name. */
public static final TableName NAMESPACE_TABLE_NAME =
@@ -551,4 +558,28 @@ public final class TableName implements Comparable<TableName> {
}
return KeyValue.COMPARATOR;
}
+
+ public static TableName getMetaTableName(Configuration conf) {
+ String metaTableName = DEFAULT_META_TABLE_NAME_STR;
+ String metaTableSuffix = conf.get(META_TABLE_SUFFIX, "");
+
+ if(isValidMetaTableSuffix(metaTableSuffix)) {
+ metaTableName = DEFAULT_META_TABLE_NAME_STR + "_" + metaTableSuffix;
+ }
+ return (valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, metaTableName));
+ }
+
+ public static boolean isValidMetaTableSuffix(String metaTableSuffix) {
+ if(StringUtils.isBlank(metaTableSuffix)) {
+ return false;
+ }
+
+ try {
+ isLegalTableQualifierName(Bytes.toBytes(metaTableSuffix));
+ } catch(IllegalArgumentException iae) {
+ LOG.warn("Invalid meta table suffix", iae);
+ return false;
+ }
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/8fb2c9a4/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java
index f585f47..1453bd2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java
@@ -23,12 +23,16 @@ import java.util.Map;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.NamespaceDescriptor;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.testclassification.MiscTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
-import org.apache.hadoop.hbase.TableName;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TestWatcher;
@@ -62,7 +66,10 @@ public class TestTableName extends TestWatcher {
String illegalTableNames[] = { ".dot_start_illegal", "-dash_start_illegal", "spaces not ok",
"-dash-.start_illegal", "new.table with space", "01 .table", "ns:-illegaldash",
"new:.illegaldot", "new:illegalcolon1:", "new:illegalcolon1:2"};
-
+ String legalMetaTableSuffixNames[] = { "foo", "with-dash_under.dot", "_under_start_ok",
+ "with-dash.with_underscore", "02-01-2012.my_table_01-02", "xyz._mytable_", "9_9_0.table_02"
+ , "dot1.dot2.table", "new.-mytable", "with-dash.with.dot", "legal..t2", "legal..legal.t2",
+ "trailingdots..", "trailing.dots..."};
@Test(expected = IllegalArgumentException.class)
public void testInvalidNamespace() {
@@ -177,6 +184,42 @@ public class TestTableName extends TestWatcher {
}
+ @Test
+ public void testEmptyMetaTableSuffix() {
+ assertFalse(TableName.isValidMetaTableSuffix(null));
+ for (String tn : emptyNames) {
+ assertFalse(TableName.isValidMetaTableSuffix(tn));
+ }
+ }
+
+ @Test
+ public void testLegalMetaTableSuffix() {
+ for (String tn : legalMetaTableSuffixNames) {
+ assertTrue(TableName.isValidMetaTableSuffix(tn));
+ }
+ }
+
+ @Test
+ public void testIllegalMetaTableSuffix() {
+ for (String tn : illegalTableNames) {
+ assertFalse(TableName.isValidMetaTableSuffix(tn));
+ }
+ }
+
+ @Test
+ public void testMetaTableSuffixWithConfig() {
+ String metaTableNameWithSuffix = "hbase:meta_server1";
+ Configuration conf = new Configuration();
+
+ // without setting suffix, meta table name should be "hbase:meta"
+ assertEquals(TableName.getMetaTableName(conf).getNameAsString(), TableName.valueOf(
+ NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, TableName.DEFAULT_META_TABLE_NAME_STR)
+ .getNameAsString());
+
+ conf.set(TableName.META_TABLE_SUFFIX, "server1");
+ assertEquals(TableName.getMetaTableName(conf).getNameAsString(), metaTableNameWithSuffix);
+ }
+
private TableName validateNames(TableName expected, Names names) {
assertEquals(expected.getNameAsString(), names.nn);
assertArrayEquals(expected.getName(), names.nnb);