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/01/10 14:15:06 UTC

[hbase] branch master updated: HBASE-21297 ModifyTableProcedure can throw TNDE instead of IOE in case of REGION_REPLICATION change

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d32e80  HBASE-21297 ModifyTableProcedure can throw TNDE instead of IOE in case of REGION_REPLICATION change
5d32e80 is described below

commit 5d32e80f9ecd74c0a89c81b57f02e1ad400c2a2f
Author: Nihal Jain <ni...@gmail.com>
AuthorDate: Thu Oct 25 22:34:17 2018 +0530

    HBASE-21297 ModifyTableProcedure can throw TNDE instead of IOE in case of REGION_REPLICATION change
    
    Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
 .../hbase/master/procedure/ModifyTableProcedure.java |  4 +++-
 .../org/apache/hadoop/hbase/client/TestAdmin1.java   | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java
index 920c18b..0567ede 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.TableNotDisabledException;
 import org.apache.hadoop.hbase.TableNotFoundException;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.RegionInfo;
@@ -249,7 +250,8 @@ public class ModifyTableProcedure
         .isTableState(getTableName(), TableState.State.ENABLED)) {
       if (modifiedTableDescriptor.getRegionReplication() != unmodifiedTableDescriptor
           .getRegionReplication()) {
-        throw new IOException("REGION_REPLICATION change is not supported for enabled tables");
+        throw new TableNotDisabledException(
+            "REGION_REPLICATION change is not supported for enabled tables");
       }
     }
 
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
index b3df2cc..40de30a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
@@ -523,6 +523,26 @@ public class TestAdmin1 {
     assertFalse(this.admin.tableExists(tableName));
   }
 
+  @Test(expected = TableNotDisabledException.class)
+  public void testModifyRegionReplicasEnabledTable() throws Exception {
+    final TableName tableName = TableName.valueOf(name.getMethodName());
+    TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY).close();
+
+    // Modify region replication count
+    TableDescriptor htd = TableDescriptorBuilder.newBuilder(admin.getDescriptor(tableName))
+        .setRegionReplication(3).build();
+    try {
+      // try to modify the region replication count without disabling the table
+      admin.modifyTable(htd);
+      fail("Expected an exception");
+    } finally {
+      // Delete the table
+      admin.disableTable(tableName);
+      admin.deleteTable(tableName);
+      assertFalse(admin.tableExists(tableName));
+    }
+  }
+
   /**
    * Verify schema modification takes.
    */