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 org.apache.hadoop.hbase.HBaseTestingUtility;
21  import org.apache.hadoop.hbase.HTableDescriptor;
22  import org.apache.hadoop.hbase.TableName;
23  import org.apache.hadoop.hbase.client.Admin;
24  import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
25  import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
26  import org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy;
27  
28  import java.util.Random;
29  
30  public class ChangeSplitPolicyAction extends Action {
31    private final TableName tableName;
32    private final String[] possiblePolicies;
33    private final Random random;
34  
35    public ChangeSplitPolicyAction(TableName tableName) {
36      this.tableName = tableName;
37      possiblePolicies = new String[] {
38          IncreasingToUpperBoundRegionSplitPolicy.class.getName(),
39          ConstantSizeRegionSplitPolicy.class.getName(),
40          DisabledRegionSplitPolicy.class.getName()
41      };
42      this.random = new Random();
43    }
44  
45  
46    @Override
47    public void perform() throws Exception {
48      HBaseTestingUtility util = context.getHBaseIntegrationTestingUtility();
49      Admin admin = util.getHBaseAdmin();
50  
51      LOG.info("Performing action: Change split policy of table " + tableName);
52      HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
53      String chosenPolicy = possiblePolicies[random.nextInt(possiblePolicies.length)];
54      tableDescriptor.setRegionSplitPolicyClassName(chosenPolicy);
55      LOG.info("Changing "  + tableName + " split policy to " + chosenPolicy);
56      admin.modifyTable(tableName, tableDescriptor);
57    }
58  }