From cf353853d5231884206f3b02392edb17dc8c9e1b Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Tue, 28 Oct 2014 17:49:39 -0700 Subject: [PATCH 2/2] HBASE-10314 Add Chaos Monkey that doesn't touch the master (Elliott Clark) Conflicts: hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java Includes license addendum. Amending-Author: Andrew Purtell --- .../hbase/chaos/factories/MonkeyFactory.java | 2 + .../StressAssignmentManagerMonkeyFactory.java | 81 ++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java index 944fe14..25c809f 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java @@ -66,6 +66,7 @@ public abstract class MonkeyFactory { public static final String SLOW_DETERMINISTIC = "slowDeterministic"; public static final String UNBALANCE = "unbalance"; public static final String SERVER_KILLING = "serverKilling"; + public static final String STRESS_AM = "stressAM"; public static final String NO_KILL = "noKill"; public static Map FACTORIES = ImmutableMap.builder() @@ -73,6 +74,7 @@ public abstract class MonkeyFactory { .put(SLOW_DETERMINISTIC, new SlowDeterministicMonkeyFactory()) .put(UNBALANCE, new UnbalanceMonkeyFactory()) .put(SERVER_KILLING, new ServerKillingMonkeyFactory()) + .put(STRESS_AM, new StressAssignmentManagerMonkeyFactory()) .put(NO_KILL, new NoKillMonkeyFactory()) .build(); diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java new file mode 100644 index 0000000..befb2fa --- /dev/null +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java @@ -0,0 +1,81 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.chaos.factories; + +import org.apache.hadoop.hbase.chaos.actions.Action; +import org.apache.hadoop.hbase.chaos.actions.AddColumnAction; +import org.apache.hadoop.hbase.chaos.actions.BatchRestartRsAction; +import org.apache.hadoop.hbase.chaos.actions.CompactRandomRegionOfTableAction; +import org.apache.hadoop.hbase.chaos.actions.CompactTableAction; +import org.apache.hadoop.hbase.chaos.actions.DumpClusterStatusAction; +import org.apache.hadoop.hbase.chaos.actions.FlushRandomRegionOfTableAction; +import org.apache.hadoop.hbase.chaos.actions.FlushTableAction; +import org.apache.hadoop.hbase.chaos.actions.MergeRandomAdjacentRegionsOfTableAction; +import org.apache.hadoop.hbase.chaos.actions.MoveRandomRegionOfTableAction; +import org.apache.hadoop.hbase.chaos.actions.MoveRegionsOfTableAction; +import org.apache.hadoop.hbase.chaos.actions.RemoveColumnAction; +import org.apache.hadoop.hbase.chaos.actions.RestartRandomRsAction; +import org.apache.hadoop.hbase.chaos.actions.RestartRsHoldingMetaAction; +import org.apache.hadoop.hbase.chaos.actions.RollingBatchRestartRsAction; +import org.apache.hadoop.hbase.chaos.actions.SplitRandomRegionOfTableAction; +import org.apache.hadoop.hbase.chaos.monkies.ChaosMonkey; +import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey; +import org.apache.hadoop.hbase.chaos.policies.CompositeSequentialPolicy; +import org.apache.hadoop.hbase.chaos.policies.DoActionsOncePolicy; +import org.apache.hadoop.hbase.chaos.policies.PeriodicRandomActionPolicy; + +public class StressAssignmentManagerMonkeyFactory extends MonkeyFactory { + @Override + public ChaosMonkey build() { + + // Actions that could slow down region movement. + // These could also get regions stuck if there are issues. + Action[] actions1 = new Action[] { + new CompactTableAction(tableName, 0.5f), + new CompactRandomRegionOfTableAction(tableName, 0.6f), + new FlushTableAction(tableName), + new FlushRandomRegionOfTableAction(tableName) + }; + + Action[] actions2 = new Action[] { + new SplitRandomRegionOfTableAction(tableName), + new MergeRandomAdjacentRegionsOfTableAction(tableName), + new AddColumnAction(tableName), + new RemoveColumnAction(tableName, columnFamilies), + new MoveRegionsOfTableAction(800, 1600, tableName), + new MoveRandomRegionOfTableAction(800, tableName), + new RestartRandomRsAction(60000), + new BatchRestartRsAction(5000, 0.5f), + new RollingBatchRestartRsAction(5000, 1.0f), + new RestartRsHoldingMetaAction(35000) + }; + + // Action to log more info for debugging + Action[] actions3 = new Action[] { + new DumpClusterStatusAction() + }; + + return new PolicyBasedChaosMonkey(util, + new PeriodicRandomActionPolicy(90 * 1000, actions1), + new CompositeSequentialPolicy( + new DoActionsOncePolicy(90 * 1000, actions2), + new PeriodicRandomActionPolicy(90 * 1000, actions2)), + new PeriodicRandomActionPolicy(90 * 1000, actions3) + ); + } +} -- 1.7.12.4 (Apple Git-37)