1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.chaos.actions;
20
21 import org.apache.commons.lang.math.RandomUtils;
22 import org.apache.hadoop.hbase.HBaseTestingUtility;
23 import org.apache.hadoop.hbase.TableName;
24 import org.apache.hadoop.hbase.client.Admin;
25
26
27
28
29 public class CompactTableAction extends Action {
30 private final TableName tableName;
31 private final int majorRatio;
32 private final long sleepTime;
33
34 public CompactTableAction(TableName tableName, float majorRatio) {
35 this(-1, tableName, majorRatio);
36 }
37
38 public CompactTableAction(
39 int sleepTime, TableName tableName, float majorRatio) {
40 this.tableName = tableName;
41 this.majorRatio = (int) (100 * majorRatio);
42 this.sleepTime = sleepTime;
43 }
44
45 @Override
46 public void perform() throws Exception {
47 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
48 Admin admin = util.getHBaseAdmin();
49 boolean major = RandomUtils.nextInt(100) < majorRatio;
50
51 LOG.info("Performing action: Compact table " + tableName + ", major=" + major);
52 try {
53 if (major) {
54 admin.majorCompact(tableName);
55 } else {
56 admin.compact(tableName);
57 }
58 } catch (Exception ex) {
59 LOG.warn("Compaction failed, might be caused by other chaos: " + ex.getMessage());
60 }
61 if (sleepTime > 0) {
62 Thread.sleep(sleepTime);
63 }
64 }
65 }