From 72f8325a56dc2c9bd011829e4be70e1b02332b17 Mon Sep 17 00:00:00 2001 From: Mike Drob Date: Sun, 23 Jul 2017 12:57:23 -0500 Subject: [PATCH] HBASE-18440 Chaos Actions modify immutable TableDescriptors --- .../hbase/chaos/actions/AddColumnAction.java | 19 ++++++++++++------- .../chaos/actions/ChangeSplitPolicyAction.java | 19 +++++++++++++------ .../chaos/actions/DecreaseMaxHFileSizeAction.java | 22 ++++++++++++++++------ 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/AddColumnAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/AddColumnAction.java index f3827473a3..5397892581 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/AddColumnAction.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/AddColumnAction.java @@ -25,6 +25,10 @@ import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; +import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; +import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; +import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.client.TableDescriptorBuilder; /** * Action the adds a column family to a table. @@ -45,12 +49,12 @@ public class AddColumnAction extends Action { @Override public void perform() throws Exception { - HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName); - HColumnDescriptor columnDescriptor = null; + TableDescriptor tableDescriptor = admin.getTableDescriptor(tableName); + ColumnFamilyDescriptor columnDescriptor = null; while(columnDescriptor == null || - tableDescriptor.getFamily(columnDescriptor.getName()) != null) { - columnDescriptor = new HColumnDescriptor(RandomStringUtils.randomAlphabetic(5)); + tableDescriptor.getColumnFamily(columnDescriptor.getName()) != null) { + columnDescriptor = ColumnFamilyDescriptorBuilder.of(RandomStringUtils.randomAlphabetic(5)); } // Don't try the modify if we're stopping @@ -59,8 +63,9 @@ public class AddColumnAction extends Action { } LOG.debug("Performing action: Adding " + columnDescriptor + " to " + tableName); - - tableDescriptor.addFamily(columnDescriptor); - admin.modifyTable(tableName, tableDescriptor); + TableDescriptor modifiedTable = TableDescriptorBuilder.newBuilder(tableDescriptor) + .addColumnFamily(columnDescriptor) + .build(); + admin.modifyTable(modifiedTable); } } diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.java index 9af572831a..1d82353201 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.java @@ -21,16 +21,20 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; +import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy; +import java.io.IOException; import java.util.Random; public class ChangeSplitPolicyAction extends Action { private final TableName tableName; private final String[] possiblePolicies; private final Random random; + private Admin admin; public ChangeSplitPolicyAction(TableName tableName) { this.tableName = tableName; @@ -42,17 +46,20 @@ public class ChangeSplitPolicyAction extends Action { this.random = new Random(); } + @Override + public void init(ActionContext context) throws IOException { + super.init(context); + this.admin = context.getHBaseIntegrationTestingUtility().getAdmin(); + } @Override public void perform() throws Exception { - HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility(); - Admin admin = util.getAdmin(); - LOG.info("Performing action: Change split policy of table " + tableName); - HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName); String chosenPolicy = possiblePolicies[random.nextInt(possiblePolicies.length)]; - tableDescriptor.setRegionSplitPolicyClassName(chosenPolicy); + TableDescriptorBuilder builder = TableDescriptorBuilder + .newBuilder(admin.listTableDescriptor(tableName)) + .setRegionSplitPolicyClassName(chosenPolicy); LOG.info("Changing " + tableName + " split policy to " + chosenPolicy); - admin.modifyTable(tableName, tableDescriptor); + admin.modifyTable(builder.build()); } } diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DecreaseMaxHFileSizeAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DecreaseMaxHFileSizeAction.java index 98babeb651..3ae53475e0 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DecreaseMaxHFileSizeAction.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DecreaseMaxHFileSizeAction.java @@ -23,7 +23,10 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; +import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.client.TableDescriptorBuilder; +import java.io.IOException; import java.util.Random; public class DecreaseMaxHFileSizeAction extends Action { @@ -33,6 +36,7 @@ public class DecreaseMaxHFileSizeAction extends Action { private final long sleepTime; private final TableName tableName; private final Random random; + private Admin admin; public DecreaseMaxHFileSizeAction(long sleepTime, TableName tableName) { this.sleepTime = sleepTime; @@ -41,13 +45,17 @@ public class DecreaseMaxHFileSizeAction extends Action { } @Override + public void init(ActionContext context) throws IOException { + super.init(context); + this.admin = context.getHBaseIntegrationTestingUtility().getAdmin(); + } + + @Override public void perform() throws Exception { - HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility(); - Admin admin = util.getAdmin(); - HTableDescriptor htd = admin.getTableDescriptor(tableName); + TableDescriptor td = admin.listTableDescriptor(tableName); // Try and get the current value. - long currentValue = htd.getMaxFileSize(); + long currentValue = td.getMaxFileSize(); // If the current value is not set use the default for the cluster. // If configs are really weird this might not work. @@ -66,7 +74,9 @@ public class DecreaseMaxHFileSizeAction extends Action { newValue = Math.max(minFileSize, newValue) - (512 - random.nextInt(1024)); // Change the table descriptor. - htd.setMaxFileSize(newValue); + TableDescriptor modifiedTable = TableDescriptorBuilder.newBuilder(td) + .setMaxFileSize(newValue) + .build(); // Don't try the modify if we're stopping if (context.isStopping()) { @@ -74,7 +84,7 @@ public class DecreaseMaxHFileSizeAction extends Action { } // modify the table. - admin.modifyTable(tableName, htd); + admin.modifyTable(modifiedTable); // Sleep some time. if (sleepTime > 0) { -- 2.13.3