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.Collection;
23
24 import org.apache.commons.lang.math.RandomUtils;
25 import org.apache.hadoop.conf.Configuration;
26 import org.apache.hadoop.hbase.ServerName;
27 import org.apache.hadoop.hbase.TableName;
28 import org.apache.hadoop.hbase.client.HTable;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32
33
34
35 public class RestartRsHoldingTableAction extends RestartActionBaseAction {
36 private static final Logger LOG =
37 LoggerFactory.getLogger(RestartRsHoldingTableAction.class);
38
39 private final String tableName;
40
41 public RestartRsHoldingTableAction(long sleepTime, String tableName) {
42 super(sleepTime);
43 this.tableName = tableName;
44 }
45
46 @Override protected Logger getLogger() {
47 return LOG;
48 }
49
50 @Override
51 public void perform() throws Exception {
52 HTable table = null;
53 try {
54 getLogger().info("Performing action: Restart random RS holding table " + this.tableName);
55 Configuration conf = context.getHBaseIntegrationTestingUtility().getConfiguration();
56 table = new HTable(conf, TableName.valueOf(tableName));
57 } catch (IOException e) {
58 getLogger().debug("Error creating HTable used to get list of region locations.", e);
59 return;
60 }
61
62 Collection<ServerName> serverNames = table.getRegionLocations().values();
63 ServerName[] nameArray = serverNames.toArray(new ServerName[serverNames.size()]);
64
65 restartRs(nameArray[RandomUtils.nextInt(nameArray.length)], sleepTime);
66 }
67 }