You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zy...@apache.org on 2018/07/11 21:50:28 UTC

[1/4] hbase git commit: HBASE-20836 Add Yetus annotation for ReadReplicaClustersTableNameUtil

Repository: hbase
Updated Branches:
  refs/heads/HBASE-18477 [created] 2355586d9


HBASE-20836 Add Yetus annotation for ReadReplicaClustersTableNameUtil

Signed-off-by: Ted Yu <yu...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/c4028686
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/c4028686
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/c4028686

Branch: refs/heads/HBASE-18477
Commit: c4028686429e0dd3837f40942f2bbc604384f9f4
Parents: a748c8b
Author: Zach York <zy...@apache.org>
Authored: Mon Jul 2 14:38:16 2018 -0700
Committer: Zach York <zy...@apache.org>
Committed: Mon Jul 9 21:42:27 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/c4028686/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
index 06db8fa..21fb292 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
@@ -19,8 +19,13 @@ package org.apache.hadoop.hbase.util;
 
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.TableName;
+import org.apache.yetus.audience.InterfaceAudience;
 
-public class ReadReplicaClustersTableNameUtil {
+@InterfaceAudience.Private
+public final class ReadReplicaClustersTableNameUtil {
+
+  private ReadReplicaClustersTableNameUtil() {
+  }
 
   /**
    * Utility method to determine if TableName is a meta TableName without taking hbase.meta.table.suffix into account.


[2/4] hbase git commit: HBASE-18773 Add utility method to determine if a TableName is a meta table

Posted by zy...@apache.org.
HBASE-18773 Add utility method to determine if a TableName is a meta table

Signed-off-by: Michael Stack <st...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a748c8ba
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a748c8ba
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a748c8ba

Branch: refs/heads/HBASE-18477
Commit: a748c8ba6bb43832b16deed2c5024388ba01a20e
Parents: 141bea4
Author: Zach York <zy...@amazon.com>
Authored: Wed Sep 6 17:48:05 2017 -0700
Committer: Zach York <zy...@apache.org>
Committed: Mon Jul 9 21:42:27 2018 -0700

----------------------------------------------------------------------
 .../java/org/apache/hadoop/hbase/TableName.java |  4 +++
 .../util/ReadReplicaClustersTableNameUtil.java  | 35 ++++++++++++++++++
 .../org/apache/hadoop/hbase/TestTableName.java  |  8 +++++
 .../TestReadReplicaClustersTableNameUtil.java   | 37 ++++++++++++++++++++
 4 files changed, 84 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/a748c8ba/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 7e68938..f796f33 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
@@ -569,4 +569,8 @@ public final class TableName implements Comparable<TableName> {
     }
     return true;
   }
+
+  public boolean isMeta() {
+    return isMetaTableName(this);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a748c8ba/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
new file mode 100644
index 0000000..06db8fa
--- /dev/null
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReadReplicaClustersTableNameUtil.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.util;
+
+import org.apache.hadoop.hbase.NamespaceDescriptor;
+import org.apache.hadoop.hbase.TableName;
+
+public class ReadReplicaClustersTableNameUtil {
+
+  /**
+   * Utility method to determine if TableName is a meta TableName without taking hbase.meta.table.suffix into account.
+   * @param tableName TableName to determine if isMeta
+   * @return if this TableName contains the default meta table name
+   */
+  public static boolean isMetaTableNameWithoutSuffix(TableName tableName) {
+    String[] parts = tableName.getNameWithNamespaceInclAsString().split(String.valueOf(TableName.NAMESPACE_DELIM));
+    return parts[0].equals(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR) &&
+        parts[1].startsWith(TableName.DEFAULT_META_TABLE_NAME_STR);
+  }
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/a748c8ba/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
index d09ca8e..2ca1540 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
@@ -233,6 +233,14 @@ public class TestTableName extends TestWatcher {
     assertEquals(TableName.getMetaTableName(conf).getNameAsString(), metaTableNameWithSuffix);
   }
 
+  @Test
+  public void testIsMeta() {
+    String userTableContainingMeta = "default:meta";
+
+    assertTrue(TableName.META_TABLE_NAME.isMeta());
+    assertFalse(TableName.valueOf(userTableContainingMeta).isMeta());
+  }
+
   private TableName validateNames(TableName expected, Names names) {
     assertEquals(expected.getNameAsString(), names.nn);
     assertArrayEquals(expected.getName(), names.nnb);

http://git-wip-us.apache.org/repos/asf/hbase/blob/a748c8ba/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
new file mode 100644
index 0000000..bde0202
--- /dev/null
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.util;
+
+import org.apache.hadoop.hbase.TableName;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class TestReadReplicaClustersTableNameUtil {
+
+  @Test
+  public void testIsMetaTableNameWithoutSuffix() {
+    String metaWithSuffix = "hbase:meta_server1";
+    String userTableContainingMeta = "default:meta";
+
+    assertTrue(ReadReplicaClustersTableNameUtil.isMetaTableNameWithoutSuffix(TableName.META_TABLE_NAME));
+    assertTrue(ReadReplicaClustersTableNameUtil.isMetaTableNameWithoutSuffix(TableName.valueOf(metaWithSuffix)));
+    assertFalse(ReadReplicaClustersTableNameUtil.isMetaTableNameWithoutSuffix(TableName.valueOf(userTableContainingMeta)));
+  }
+}


[4/4] hbase git commit: HBASE-20868 Fix TestCheckTestClasses on HBASE-18477

Posted by zy...@apache.org.
HBASE-20868 Fix TestCheckTestClasses on HBASE-18477

Signed-off-by: Ted Yu <te...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/2355586d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2355586d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2355586d

Branch: refs/heads/HBASE-18477
Commit: 2355586d92cc33612790fcda94f333155007c26b
Parents: c402868
Author: Zach York <zy...@apache.org>
Authored: Mon Jul 9 22:36:30 2018 -0700
Committer: Zach York <zy...@amazon.com>
Committed: Wed Jul 11 14:49:53 2018 -0700

----------------------------------------------------------------------
 .../util/TestReadReplicaClustersTableNameUtil.java  | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/2355586d/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
index bde0202..aee03fc 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestReadReplicaClustersTableNameUtil.java
@@ -17,14 +17,24 @@
  */
 package org.apache.hadoop.hbase.util;
 
-import org.apache.hadoop.hbase.TableName;
-import org.junit.Test;
-
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.hadoop.hbase.HBaseClassTestRule;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.testclassification.MiscTests;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({MiscTests.class, SmallTests.class})
 public class TestReadReplicaClustersTableNameUtil {
 
+  @ClassRule
+  public static final HBaseClassTestRule CLASS_RULE =
+      HBaseClassTestRule.forClass(TestReadReplicaClustersTableNameUtil.class);
+
   @Test
   public void testIsMetaTableNameWithoutSuffix() {
     String metaWithSuffix = "hbase:meta_server1";


[3/4] hbase git commit: HBASE-18444 Add support for specifying custom meta table suffix

Posted by zy...@apache.org.
HBASE-18444 Add support for specifying custom meta table suffix

Signed-off-by: tedyu <yu...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/141bea4e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/141bea4e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/141bea4e

Branch: refs/heads/HBASE-18477
Commit: 141bea4e73a55f8285b6c19e4fa5dccce5aef00f
Parents: d7561ce
Author: Ajay Jadhav <ja...@amazon.com>
Authored: Fri Sep 1 17:14:57 2017 -0700
Committer: Zach York <zy...@apache.org>
Committed: Mon Jul 9 21:42:27 2018 -0700

----------------------------------------------------------------------
 .../java/org/apache/hadoop/hbase/TableName.java | 40 ++++++++++++-
 .../org/apache/hadoop/hbase/TestTableName.java  | 62 ++++++++++++++++----
 2 files changed, 89 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/141bea4e/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 e6cabbc..7e68938 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,15 @@ import java.util.Arrays;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.yetus.audience.InterfaceAudience;
 
+
 /**
  * Immutable POJO class for representing a table name.
  * Which is of the form:
@@ -53,6 +59,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  */
 @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<>();
@@ -76,9 +83,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 =
@@ -535,4 +544,29 @@ public final class TableName implements Comparable<TableName> {
     return this.nameAsString.compareTo(tableName.getNameAsString());
   }
 
+  @VisibleForTesting
+  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));
+  }
+
+  @VisibleForTesting
+  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/141bea4e/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
index 43a384a..d09ca8e 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestTableName.java
@@ -19,12 +19,15 @@ package org.apache.hadoop.hbase;
 
 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 java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.testclassification.MiscTests;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -58,16 +61,19 @@ public class TestTableName extends TestWatcher {
     return tableName;
   }
 
-  String[] emptyNames = {"", " "};
-  String[] invalidNamespace = {":a", "%:a"};
-  String[] legalTableNames = {"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...", "ns:mytable", "ns:_mytable_", "ns:my_table_01-02"};
-  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 emptyNames[] ={"", " "};
+  String invalidNamespace[] = {":a", "%:a"};
+  String legalTableNames[] = { "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...", "ns:mytable", "ns:_mytable_", "ns:my_table_01-02"};
+  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() {
@@ -191,6 +197,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);