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.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31
32
33
34
35
36 public class ChangeVersionsAction extends Action {
37 private static final Logger LOG = LoggerFactory.getLogger(ChangeVersionsAction.class);
38 private final TableName tableName;
39 private final Random random;
40
41 private Admin admin;
42
43 public ChangeVersionsAction(TableName tableName) {
44 this.tableName = tableName;
45 this.random = new Random();
46 }
47
48 @Override protected Logger getLogger() {
49 return LOG;
50 }
51
52 @Override
53 public void init(ActionContext context) throws IOException {
54 super.init(context);
55 this.admin = context.getHBaseIntegrationTestingUtility().getHBaseAdmin();
56 }
57
58 @Override
59 public void perform() throws Exception {
60 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
61 HColumnDescriptor[] columnDescriptors = tableDescriptor.getColumnFamilies();
62
63 if ( columnDescriptors == null || columnDescriptors.length == 0) {
64 return;
65 }
66
67 int versions = random.nextInt(3) + 1;
68 for(HColumnDescriptor descriptor:columnDescriptors) {
69 descriptor.setVersions(versions, versions);
70 }
71
72 if (context.isStopping()) {
73 return;
74 }
75 getLogger().debug("Performing action: Changing versions on " + tableName.getNameAsString());
76 admin.modifyTable(tableName, tableDescriptor);
77 }
78 }