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 java.io.IOException;
22 import java.util.Random;
23
24 import org.apache.hadoop.hbase.HColumnDescriptor;
25 import org.apache.hadoop.hbase.HTableDescriptor;
26 import org.apache.hadoop.hbase.client.HBaseAdmin;
27 import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
28 import org.apache.hadoop.hbase.util.Bytes;
29
30
31
32
33 public class ChangeCompressionAction extends Action {
34 private final byte[] tableName;
35 private final String tableNameString;
36
37 private HBaseAdmin admin;
38 private Random random;
39
40 public ChangeCompressionAction(String tableName) {
41 tableNameString = tableName;
42 this.tableName = Bytes.toBytes(tableName);
43 this.random = new Random();
44 }
45
46 @Override
47 public void init(ActionContext context) throws IOException {
48 super.init(context);
49 this.admin = context.getHBaseIntegrationTestingUtility().getHBaseAdmin();
50 }
51
52 @Override
53 public void perform() throws Exception {
54 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
55 HColumnDescriptor[] columnDescriptors = tableDescriptor.getColumnFamilies();
56
57 if (columnDescriptors == null || columnDescriptors.length == 0) {
58 return;
59 }
60
61
62
63 Algorithm[] possibleAlgos = Algorithm.values();
64
65
66
67 Algorithm algo = possibleAlgos[random.nextInt(possibleAlgos.length)];
68
69 LOG.debug("Performing action: Changing compression algorithms on "
70 + tableNameString + " to " + algo);
71 for (HColumnDescriptor descriptor : columnDescriptors) {
72 if (random.nextBoolean()) {
73 descriptor.setCompactionCompressionType(algo);
74 } else {
75 descriptor.setCompressionType(algo);
76 }
77 }
78
79 admin.modifyTable(tableName, tableDescriptor);
80 }
81 }