001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.hadoop.hbase.chaos.factories;
019
020import org.apache.hadoop.hbase.chaos.actions.Action;
021import org.apache.hadoop.hbase.chaos.actions.AddCPULoadAction;
022import org.apache.hadoop.hbase.chaos.actions.CorruptPacketsCommandAction;
023import org.apache.hadoop.hbase.chaos.actions.DelayPacketsCommandAction;
024import org.apache.hadoop.hbase.chaos.actions.DumpClusterStatusAction;
025import org.apache.hadoop.hbase.chaos.actions.DuplicatePacketsCommandAction;
026import org.apache.hadoop.hbase.chaos.actions.FillDiskCommandAction;
027import org.apache.hadoop.hbase.chaos.actions.LosePacketsCommandAction;
028import org.apache.hadoop.hbase.chaos.actions.ReorderPacketsCommandAction;
029import org.apache.hadoop.hbase.chaos.monkies.ChaosMonkey;
030import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey;
031import org.apache.hadoop.hbase.chaos.policies.PeriodicRandomActionPolicy;
032
033/**
034 * A chaos monkey to create distributed cluster related issues, requires a user with passwordless
035 * ssh access to the cluster and sudo privileges.
036 */
037public class DistributedIssuesMonkeyFactory extends MonkeyFactory {
038
039  @Override
040  public ChaosMonkey build() {
041    loadProperties();
042
043    Action[] actions1 =
044      new Action[] { new AddCPULoadAction(cpuLoadDuration, cpuLoadProcesses, networkIssueTimeout),
045        new CorruptPacketsCommandAction(networkIssueRation, networkIssueDuration,
046          networkIssueTimeout, networkIssueInterface),
047        new DuplicatePacketsCommandAction(networkIssueRation, networkIssueDuration,
048          networkIssueTimeout, networkIssueInterface),
049        new LosePacketsCommandAction(networkIssueRation, networkIssueDuration, networkIssueTimeout,
050          networkIssueInterface),
051        new DelayPacketsCommandAction(networkIssueDelay, networkIssueDuration, networkIssueTimeout,
052          networkIssueInterface),
053        new ReorderPacketsCommandAction(networkIssueRation, networkIssueDuration, networkIssueDelay,
054          networkIssueTimeout, networkIssueInterface),
055        new FillDiskCommandAction(fillDiskFileSize, fillDiskIssueduration, fillDiskPath,
056          fillDiskTimeout) };
057
058    // Action to log more info for debugging
059    Action[] actions2 = new Action[] { new DumpClusterStatusAction() };
060
061    return new PolicyBasedChaosMonkey(properties, util,
062      new PeriodicRandomActionPolicy(action1Period, actions1),
063      new PeriodicRandomActionPolicy(action2Period, actions2));
064  }
065}