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.client.HBaseAdmin;
28 import org.apache.hadoop.hbase.util.Bytes;
29
30
31
32
33 public class RemoveColumnAction extends Action {
34 private final byte[] tableName;
35 private final Set<String> protectedColumns;
36 private HBaseAdmin admin;
37 private Random random;
38
39 public RemoveColumnAction(String tableName, Set<String> protectedColumns) {
40 this.tableName = Bytes.toBytes(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.getHaseIntegrationTestingUtility().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.contains(columnDescriptors[index].getNameAsString())) {
62 index = random.nextInt(columnDescriptors.length);
63 }
64
65 tableDescriptor.removeFamily(columnDescriptors[index].getName());
66
67 admin.modifyTable(tableName, tableDescriptor);
68 }
69 }