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.TableName;
22 import org.apache.hadoop.hbase.client.Admin;
23
24 import java.io.IOException;
25 import java.util.concurrent.ThreadLocalRandom;
26
27
28 public class SplitAllRegionOfTableAction extends Action {
29 private static final int DEFAULT_MAX_SPLITS = 3;
30 private static final String MAX_SPLIT_KEY = "hbase.chaosmonkey.action.maxFullTableSplits";
31
32 private final TableName tableName;
33 private int maxFullTableSplits = DEFAULT_MAX_SPLITS;
34 private int splits = 0;
35
36 public SplitAllRegionOfTableAction(TableName tableName) {
37 this.tableName = tableName;
38 }
39
40
41 public void init(ActionContext context) throws IOException {
42 super.init(context);
43 this.maxFullTableSplits = getConf().getInt(MAX_SPLIT_KEY, DEFAULT_MAX_SPLITS);
44 }
45
46 @Override
47 public void perform() throws Exception {
48 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
49 Admin admin = util.getHBaseAdmin();
50
51 if (context.isStopping()) {
52 return;
53 }
54
55
56
57 if (ThreadLocalRandom.current().nextDouble()
58 < (((double) splits) / ((double) maxFullTableSplits)) / ((double) 2)) {
59 splits++;
60 LOG.info("Performing action: Split all regions of " + tableName);
61 admin.split(tableName);
62 } else {
63 LOG.info("Skipping split of all regions.");
64 }
65 }
66 }