Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public final class TableName implements Comparable<TableName> {
// with NAMESPACE_DELIM as delimiter
public static final String VALID_USER_TABLE_REGEX = "(?:(?:(?:" + VALID_NAMESPACE_REGEX + "\\"
+ NAMESPACE_DELIM + ")?)" + "(?:" + VALID_TABLE_QUALIFIER_REGEX + "))";
public static final String VALID_META_TABLE_SUFFIX_REGEX = "[a-zA-Z0-9]+";

/**
* The name of hbase meta table could either be hbase:meta_xxx or 'hbase:meta' otherwise. Config
Expand All @@ -96,6 +97,11 @@ public static TableName initializeHbaseMetaTableName(Configuration conf) {
if (Strings.isNullOrEmpty(suffix_val)) {
return valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "meta");
} else {
if (!suffix_val.matches(VALID_META_TABLE_SUFFIX_REGEX)) {
throw new IllegalArgumentException("Invalid value '" + suffix_val + "' for config '"
+ HConstants.HBASE_META_TABLE_SUFFIX + "'. Suffix must only contain ASCII letters and "
+ "digits matching: " + VALID_META_TABLE_SUFFIX_REGEX);
}
return valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "meta_" + suffix_val);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.testclassification.MiscTests;
import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.util.Bytes;
Expand Down Expand Up @@ -164,4 +165,27 @@ private TableName validateNames(TableName expected, Names names) {
assertArrayEquals(expected.getNamespace(), names.nsb);
return expected;
}

@Test
public void testValidMetaTableSuffix() {
String[] validSuffixes = { "REPL1", "123", "123abc" };
for (String suffix : validSuffixes) {
Configuration conf = HBaseConfiguration.create();
conf.set(HConstants.HBASE_META_TABLE_SUFFIX, suffix);
TableName metaTableName = TableName.initializeHbaseMetaTableName(conf);
assertEquals("hbase:meta_" + suffix, metaTableName.getNameAsString());
}
}

@Test
public void testInvalidMetaTableSuffix() {
String[] invalidSuffixes = { "test_1", "test-1", "test.1", "test 1", "_test",
"-test", ".test", "has!special", "has:colon", " " };
for (String suffix : invalidSuffixes) {
Configuration conf = HBaseConfiguration.create();
conf.set(HConstants.HBASE_META_TABLE_SUFFIX, suffix);
assertThrows("Expected IllegalArgumentException for suffix: " + suffix,
IllegalArgumentException.class, () -> TableName.initializeHbaseMetaTableName(conf));
}
}
}
Loading