Skip to content

Commit dfef846

Browse files
committed
Merge pull request Netflix#135 from Netflix/fix-maxKills-chaos-bug
maxTerminationsPerDay was checked only once for the group before the ite...
2 parents 1f1a4ce + 122e074 commit dfef846

1 file changed

Lines changed: 27 additions & 58 deletions

File tree

src/main/java/com/netflix/simianarmy/basic/chaos/BasicChaosMonkey.java

Lines changed: 27 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -17,48 +17,17 @@
1717
*/
1818
package com.netflix.simianarmy.basic.chaos;
1919

20-
import java.util.Calendar;
21-
import java.util.Collection;
22-
import java.util.Date;
23-
import java.util.HashMap;
24-
import java.util.List;
25-
import java.util.Map;
26-
import java.util.Random;
27-
import java.util.concurrent.TimeUnit;
28-
20+
import com.google.common.collect.Lists;
21+
import com.netflix.simianarmy.*;
22+
import com.netflix.simianarmy.MonkeyRecorder.Event;
23+
import com.netflix.simianarmy.chaos.*;
24+
import com.netflix.simianarmy.chaos.ChaosCrawler.InstanceGroup;
2925
import org.apache.commons.lang.Validate;
3026
import org.slf4j.Logger;
3127
import org.slf4j.LoggerFactory;
3228

33-
import com.google.common.collect.Lists;
34-
import com.netflix.simianarmy.CloudClient;
35-
import com.netflix.simianarmy.FeatureNotEnabledException;
36-
import com.netflix.simianarmy.InstanceGroupNotFoundException;
37-
import com.netflix.simianarmy.MonkeyCalendar;
38-
import com.netflix.simianarmy.MonkeyConfiguration;
39-
import com.netflix.simianarmy.MonkeyRecorder.Event;
40-
import com.netflix.simianarmy.NotFoundException;
41-
import com.netflix.simianarmy.chaos.BlockAllNetworkTrafficChaosType;
42-
import com.netflix.simianarmy.chaos.BurnIoChaosType;
43-
import com.netflix.simianarmy.chaos.ChaosCrawler.InstanceGroup;
44-
import com.netflix.simianarmy.chaos.BurnCpuChaosType;
45-
import com.netflix.simianarmy.chaos.ChaosEmailNotifier;
46-
import com.netflix.simianarmy.chaos.ChaosInstance;
47-
import com.netflix.simianarmy.chaos.ChaosMonkey;
48-
import com.netflix.simianarmy.chaos.ChaosType;
49-
import com.netflix.simianarmy.chaos.DetachVolumesChaosType;
50-
import com.netflix.simianarmy.chaos.FailEc2ChaosType;
51-
import com.netflix.simianarmy.chaos.FailDnsChaosType;
52-
import com.netflix.simianarmy.chaos.FailDynamoDbChaosType;
53-
import com.netflix.simianarmy.chaos.FailS3ChaosType;
54-
import com.netflix.simianarmy.chaos.FillDiskChaosType;
55-
import com.netflix.simianarmy.chaos.KillProcessesChaosType;
56-
import com.netflix.simianarmy.chaos.NetworkCorruptionChaosType;
57-
import com.netflix.simianarmy.chaos.NetworkLatencyChaosType;
58-
import com.netflix.simianarmy.chaos.NetworkLossChaosType;
59-
import com.netflix.simianarmy.chaos.NullRouteChaosType;
60-
import com.netflix.simianarmy.chaos.ShutdownInstanceChaosType;
61-
import com.netflix.simianarmy.chaos.SshConfig;
29+
import java.util.*;
30+
import java.util.concurrent.TimeUnit;
6231

6332
/**
6433
* The Class BasicChaosMonkey.
@@ -133,29 +102,29 @@ public BasicChaosMonkey(ChaosMonkey.Context ctx) {
133102
/** {@inheritDoc} */
134103
@Override
135104
public void doMonkeyBusiness() {
136-
context().resetEventReport();
137-
cfg.reload();
138-
if (!isChaosMonkeyEnabled()) {
139-
return;
140-
}
141-
for (InstanceGroup group : context().chaosCrawler().groups()) {
142-
if (isGroupEnabled(group)) {
143-
if (isMaxTerminationCountExceeded(group)) {
144-
continue;
145-
}
146-
double prob = getEffectiveProbability(group);
147-
Collection<String> instances = context().chaosInstanceSelector().select(group, prob / runsPerDay);
148-
for (String inst : instances) {
149-
ChaosType chaosType = pickChaosType(context().cloudClient(), inst);
150-
if (chaosType == null) {
151-
// This is surprising ... normally we can always just terminate it
152-
LOGGER.warn("No chaos type was applicable to the instance: {}", inst);
153-
continue;
105+
context().resetEventReport();
106+
cfg.reload();
107+
if (!isChaosMonkeyEnabled()) {
108+
return;
109+
}
110+
for (InstanceGroup group : context().chaosCrawler().groups()) {
111+
if (isGroupEnabled(group)) {
112+
double prob = getEffectiveProbability(group);
113+
Collection<String> instances = context().chaosInstanceSelector().select(group, prob / runsPerDay);
114+
for (String inst : instances) {
115+
if (isMaxTerminationCountExceeded(group)) {
116+
break;
117+
}
118+
ChaosType chaosType = pickChaosType(context().cloudClient(), inst);
119+
if (chaosType == null) {
120+
// This is surprising ... normally we can always just terminate it
121+
LOGGER.warn("No chaos type was applicable to the instance: {}", inst);
122+
continue;
123+
}
124+
terminateInstance(group, inst, chaosType);
154125
}
155-
terminateInstance(group, inst, chaosType);
156126
}
157127
}
158-
}
159128
}
160129

161130
private ChaosType pickChaosType(CloudClient cloudClient, String instanceId) {

0 commit comments

Comments
 (0)