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.util.Random;
22
23 import org.apache.hadoop.hbase.HBaseTestingUtility;
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.apache.hadoop.hbase.regionserver.BloomType;
29
30
31
32
33
34 public class ChangeBloomFilterAction extends Action {
35 private final long sleepTime;
36 private final TableName tableName;
37
38 public ChangeBloomFilterAction(TableName tableName) {
39 this(-1, tableName);
40 }
41
42 public ChangeBloomFilterAction(int sleepTime, TableName tableName) {
43 this.sleepTime = sleepTime;
44 this.tableName = tableName;
45 }
46
47 @Override
48 public void perform() throws Exception {
49 Random random = new Random();
50 HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
51 Admin admin = util.getHBaseAdmin();
52
53 LOG.info("Performing action: Change bloom filter on all columns of table "
54 + tableName);
55 HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
56 HColumnDescriptor[] columnDescriptors = tableDescriptor.getColumnFamilies();
57
58 if (columnDescriptors == null || columnDescriptors.length == 0) {
59 return;
60 }
61
62 final BloomType[] bloomArray = BloomType.values();
63 final int bloomArraySize = bloomArray.length;
64
65 for (HColumnDescriptor descriptor : columnDescriptors) {
66 int bloomFilterIndex = random.nextInt(bloomArraySize);
67 LOG.debug("Performing action: About to set bloom filter type to "
68 + bloomArray[bloomFilterIndex] + " on column "
69 + descriptor.getNameAsString() + " of table " + tableName);
70 descriptor.setBloomFilterType(bloomArray[bloomFilterIndex]);
71 LOG.debug("Performing action: Just set bloom filter type to "
72 + bloomArray[bloomFilterIndex] + " on column "
73 + descriptor.getNameAsString() + " of table " + tableName);
74 }
75
76
77 if (context.isStopping()) {
78 return;
79 }
80 admin.modifyTable(tableName, tableDescriptor);
81 }
82 }