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.TableName;
27 import org.apache.hadoop.hbase.client.Admin;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31
32
33
34 public class AddColumnAction extends Action {
35 private final TableName tableName;
36 private Admin admin;
37 private static final Logger LOG = LoggerFactory.getLogger(AddColumnAction.class);
38
39 public AddColumnAction(TableName tableName) {
40 this.tableName = tableName;
41 }
42
43 @Override protected Logger getLogger() {
44 return LOG;
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 columnDescriptor = null;
57
58 while(columnDescriptor == null ||
59 tableDescriptor.getFamily(columnDescriptor.getName()) != null) {
60 columnDescriptor = new HColumnDescriptor(RandomStringUtils.randomAlphabetic(5));
61 }
62
63
64 if (context.isStopping()) {
65 return;
66 }
67
68 getLogger().debug("Performing action: Adding " + columnDescriptor + " to " + tableName);
69
70 tableDescriptor.addFamily(columnDescriptor);
71 admin.modifyTable(tableName, tableDescriptor);
72 }
73 }