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