1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.chaos.actions;
19
20 import java.util.Random;
21
22 import org.apache.hadoop.hbase.HBaseTestingUtility;
23 import org.apache.hadoop.hbase.HTableDescriptor;
24 import org.apache.hadoop.hbase.TableName;
25 import org.apache.hadoop.hbase.client.Admin;
26 import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
27 import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
28 import org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 public class ChangeSplitPolicyAction extends Action {
33 private static final Logger LOG = LoggerFactory.getLogger(ChangeSplitPolicyAction.class);
34 private final TableName tableName;
35 private final String[] possiblePolicies;
36 private final Random random;
37
38 public ChangeSplitPolicyAction(TableName tableName) {
39 this.tableName = tableName;
40 possiblePolicies = new String[] {
41 IncreasingToUpperBoundRegionSplitPolicy.class.getName(),
42 ConstantSizeRegionSplitPolicy.class.getName(),
43 DisabledRegionSplitPolicy.class.getName()
44 };
45 this.random = new Random();
46 }
47
48 @Override protected Logger getLogger() {
49 return LOG;
50 }
51
52 @Override
53 public void perform() throws Exception {
54 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
55 Admin admin = util.getHBaseAdmin();
56
57 getLogger().info("Performing action: Change split policy of table " + tableName);
58 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
59 String chosenPolicy = possiblePolicies[random.nextInt(possiblePolicies.length)];
60 tableDescriptor.setRegionSplitPolicyClassName(chosenPolicy);
61 getLogger().info("Changing " + tableName + " split policy to " + chosenPolicy);
62 admin.modifyTable(tableName, tableDescriptor);
63 }
64 }