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.Collection;
22 import java.util.List;
23
24 import org.apache.commons.lang.math.RandomUtils;
25 import org.apache.hadoop.hbase.HRegionInfo;
26 import org.apache.hadoop.hbase.ServerName;
27 import org.apache.hadoop.hbase.client.HBaseAdmin;
28 import org.apache.hadoop.hbase.util.Bytes;
29
30
31
32
33 public class MoveRegionsOfTableAction extends Action {
34 private final long sleepTime;
35 private final byte[] tableNameBytes;
36 private final String tableName;
37
38 public MoveRegionsOfTableAction(String tableName) {
39 this(-1, tableName);
40 }
41
42 public MoveRegionsOfTableAction(long sleepTime, String tableName) {
43 this.sleepTime = sleepTime;
44 this.tableNameBytes = Bytes.toBytes(tableName);
45 this.tableName = tableName;
46 }
47
48 @Override
49 public void perform() throws Exception {
50 HBaseAdmin admin = this.context.getHaseIntegrationTestingUtility().getHBaseAdmin();
51
52 List<HRegionInfo> regions = admin.getTableRegions(tableNameBytes);
53 Collection<ServerName> serversList = admin.getClusterStatus().getServers();
54 ServerName[] servers = serversList.toArray(new ServerName[serversList.size()]);
55
56 LOG.info("Performing action: Move regions of table " + tableName);
57 for (HRegionInfo regionInfo:regions) {
58 try {
59 String destServerName =
60 servers[RandomUtils.nextInt(servers.length)].getServerName();
61 LOG.debug("Moving " + regionInfo.getRegionNameAsString() + " to " + destServerName);
62 admin.move(regionInfo.getRegionName(), Bytes.toBytes(destServerName));
63 } catch (Exception e) {
64 LOG.debug("Error moving region", e);
65 }
66 }
67 if (sleepTime > 0) {
68 Thread.sleep(sleepTime);
69 }
70 }
71 }