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 import java.util.Set;
24
25 import org.apache.hadoop.hbase.HColumnDescriptor;
26 import org.apache.hadoop.hbase.HTableDescriptor;
27 import org.apache.hadoop.hbase.TableName;
28 import org.apache.hadoop.hbase.client.Admin;
29
30
31
32
33 public class RemoveColumnAction extends Action {
34 private final TableName tableName;
35 private final Set<String> protectedColumns;
36 private Admin admin;
37 private Random random;
38
39 public RemoveColumnAction(TableName tableName, Set<String> protectedColumns) {
40 this.tableName = tableName;
41 this.protectedColumns = protectedColumns;
42 random = new Random();
43 }
44
45 @Override
46 public void init(ActionContext context) throws IOException {
47 super.init(context);
48 this.admin = context.getHBaseIntegrationTestingUtility().getHBaseAdmin();
49 }
50
51 @Override
52 public void perform() throws Exception {
53 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
54 HColumnDescriptor[] columnDescriptors = tableDescriptor.getColumnFamilies();
55
56 if (columnDescriptors.length <= 1) {
57 return;
58 }
59
60 int index = random.nextInt(columnDescriptors.length);
61 while(protectedColumns != null &&
62 protectedColumns.contains(columnDescriptors[index].getNameAsString())) {
63 index = random.nextInt(columnDescriptors.length);
64 }
65 LOG.debug("Performing action: Removing " + columnDescriptors[index].getName() + " from "
66 + tableName.getNameAsString());
67 tableDescriptor.removeFamily(columnDescriptors[index].getName());
68
69 admin.modifyTable(tableName, tableDescriptor);
70 }
71 }