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}