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.client.HBaseAdmin;
24 import org.apache.hadoop.hbase.util.Bytes;
25
26
27
28
29 public class CompactTableAction extends Action {
30 private final byte[] tableNameBytes;
31 private final int majorRatio;
32 private final long sleepTime;
33 private final String tableName;
34
35 public CompactTableAction(String tableName, float majorRatio) {
36 this(-1, tableName, majorRatio);
37 }
38
39 public CompactTableAction(
40 int sleepTime, String tableName, float majorRatio) {
41 this.tableNameBytes = Bytes.toBytes(tableName);
42 this.majorRatio = (int) (100 * majorRatio);
43 this.sleepTime = sleepTime;
44 this.tableName = tableName;
45 }
46
47 @Override
48 public void perform() throws Exception {
49 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
50 HBaseAdmin admin = util.getHBaseAdmin();
51 boolean major = RandomUtils.nextInt(100) < majorRatio;
52
53 LOG.info("Performing action: Compact table " + tableName + ", major=" + major);
54 try {
55 if (major) {
56 admin.majorCompact(tableNameBytes);
57 } else {
58 admin.compact(tableNameBytes);
59 }
60 } catch (Exception ex) {
61 LOG.warn("Compaction failed, might be caused by other chaos: " + ex.getMessage());
62 }
63 if (sleepTime > 0) {
64 Thread.sleep(sleepTime);
65 }
66 }
67 }