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
23 import org.apache.commons.lang.RandomStringUtils;
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 public class AddColumnAction extends Action {
33 private final byte[] tableName;
34 private final String tableNameString;
35 private HBaseAdmin admin;
36
37 public AddColumnAction(String tableName) {
38 tableNameString = tableName;
39 this.tableName = Bytes.toBytes(tableName);
40 }
41
42 @Override
43 public void init(ActionContext context) throws IOException {
44 super.init(context);
45 this.admin = context.getHBaseIntegrationTestingUtility().getHBaseAdmin();
46 }
47
48 @Override
49 public void perform() throws Exception {
50 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
51 HColumnDescriptor columnDescriptor = null;
52
53 while(columnDescriptor == null ||
54 tableDescriptor.getFamily(columnDescriptor.getName()) != null) {
55 columnDescriptor = new HColumnDescriptor(RandomStringUtils.randomAlphabetic(5));
56 }
57
58 LOG.debug("Performing action: Adding " + columnDescriptor + " to " + tableNameString);
59
60 tableDescriptor.addFamily(columnDescriptor);
61 admin.modifyTable(tableName, tableDescriptor);
62 }
63 }