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.util.Bytes;
28
29
30
31
32
33
34 public class ChangeVersionsAction extends Action {
35 private final byte[] tableName;
36 private final String tableNameString;
37
38 private HBaseAdmin admin;
39 private Random random;
40
41 public ChangeVersionsAction(String tableName) {
42 tableNameString = tableName;
43 this.tableName = Bytes.toBytes(tableName);
44 this.random = new Random();
45 }
46
47 @Override
48 public void init(ActionContext context) throws IOException {
49 super.init(context);
50 this.admin = context.getHBaseIntegrationTestingUtility().getHBaseAdmin();
51 }
52
53 @Override
54 public void perform() throws Exception {
55 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
56 HColumnDescriptor[] columnDescriptors = tableDescriptor.getColumnFamilies();
57
58 if ( columnDescriptors == null || columnDescriptors.length == 0) {
59 return;
60 }
61
62 int versions = random.nextInt(3) + 1;
63 for(HColumnDescriptor descriptor:columnDescriptors) {
64 descriptor.setMaxVersions(versions);
65 descriptor.setMinVersions(versions);
66 }
67 LOG.debug("Performing action: Changing versions on " + tableNameString);
68 admin.modifyTable(tableName, tableDescriptor);
69 }
70 }