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 org.apache.hadoop.hbase.HBaseTestingUtility;
21 import org.apache.hadoop.hbase.HTableDescriptor;
22 import org.apache.hadoop.hbase.TableName;
23 import org.apache.hadoop.hbase.client.Admin;
24 import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
25 import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
26 import org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy;
27
28 import java.util.Random;
29
30 public class ChangeSplitPolicyAction extends Action {
31 private final TableName tableName;
32 private final String[] possiblePolicies;
33 private final Random random;
34
35 public ChangeSplitPolicyAction(TableName tableName) {
36 this.tableName = tableName;
37 possiblePolicies = new String[] {
38 IncreasingToUpperBoundRegionSplitPolicy.class.getName(),
39 ConstantSizeRegionSplitPolicy.class.getName(),
40 DisabledRegionSplitPolicy.class.getName()
41 };
42 this.random = new Random();
43 }
44
45
46 @Override
47 public void perform() throws Exception {
48 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
49 Admin admin = util.getHBaseAdmin();
50
51 LOG.info("Performing action: Change split policy of table " + tableName);
52 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
53 String chosenPolicy = possiblePolicies[random.nextInt(possiblePolicies.length)];
54 tableDescriptor.setRegionSplitPolicyClassName(chosenPolicy);
55 LOG.info("Changing " + tableName + " split policy to " + chosenPolicy);
56 admin.modifyTable(tableName, tableDescriptor);
57 }
58 }