View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.hadoop.hbase.chaos.actions;
19  
20  import java.util.Random;
21  
22  import org.apache.hadoop.hbase.HBaseTestingUtility;
23  import org.apache.hadoop.hbase.HTableDescriptor;
24  import org.apache.hadoop.hbase.TableName;
25  import org.apache.hadoop.hbase.client.Admin;
26  import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
27  import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
28  import org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy;
29  import org.slf4j.Logger;
30  import org.slf4j.LoggerFactory;
31  
32  public class ChangeSplitPolicyAction extends Action {
33    private static final Logger LOG = LoggerFactory.getLogger(ChangeSplitPolicyAction.class);
34    private final TableName tableName;
35    private final String[] possiblePolicies;
36    private final Random random;
37  
38    public ChangeSplitPolicyAction(TableName tableName) {
39      this.tableName = tableName;
40      possiblePolicies = new String[] {
41          IncreasingToUpperBoundRegionSplitPolicy.class.getName(),
42          ConstantSizeRegionSplitPolicy.class.getName(),
43          DisabledRegionSplitPolicy.class.getName()
44      };
45      this.random = new Random();
46    }
47  
48    @Override protected Logger getLogger() {
49      return LOG;
50    }
51  
52    @Override
53    public void perform() throws Exception {
54      HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
55      Admin admin = util.getHBaseAdmin();
56  
57      getLogger().info("Performing action: Change split policy of table " + tableName);
58      HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
59      String chosenPolicy = possiblePolicies[random.nextInt(possiblePolicies.length)];
60      tableDescriptor.setRegionSplitPolicyClassName(chosenPolicy);
61      getLogger().info("Changing "  + tableName + " split policy to " + chosenPolicy);
62      admin.modifyTable(tableName, tableDescriptor);
63    }
64  }