1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.chaos.factories;
20
21 import org.apache.hadoop.hbase.chaos.actions.Action;
22 import org.apache.hadoop.hbase.chaos.actions.AddColumnAction;
23 import org.apache.hadoop.hbase.chaos.actions.BatchRestartRsAction;
24 import org.apache.hadoop.hbase.chaos.actions.ChangeCompressionAction;
25 import org.apache.hadoop.hbase.chaos.actions.ChangeBloomFilterAction;
26 import org.apache.hadoop.hbase.chaos.actions.ChangeEncodingAction;
27 import org.apache.hadoop.hbase.chaos.actions.ChangeVersionsAction;
28 import org.apache.hadoop.hbase.chaos.actions.CompactRandomRegionOfTableAction;
29 import org.apache.hadoop.hbase.chaos.actions.CompactTableAction;
30 import org.apache.hadoop.hbase.chaos.actions.DumpClusterStatusAction;
31 import org.apache.hadoop.hbase.chaos.actions.FlushRandomRegionOfTableAction;
32 import org.apache.hadoop.hbase.chaos.actions.FlushTableAction;
33 import org.apache.hadoop.hbase.chaos.actions.MergeRandomAdjacentRegionsOfTableAction;
34 import org.apache.hadoop.hbase.chaos.actions.MoveRandomRegionOfTableAction;
35 import org.apache.hadoop.hbase.chaos.actions.MoveRegionsOfTableAction;
36 import org.apache.hadoop.hbase.chaos.actions.RemoveColumnAction;
37 import org.apache.hadoop.hbase.chaos.actions.RestartActiveMasterAction;
38 import org.apache.hadoop.hbase.chaos.actions.RestartRandomRsAction;
39 import org.apache.hadoop.hbase.chaos.actions.RestartRsHoldingMetaAction;
40 import org.apache.hadoop.hbase.chaos.actions.RollingBatchRestartRsAction;
41 import org.apache.hadoop.hbase.chaos.actions.SnapshotTableAction;
42 import org.apache.hadoop.hbase.chaos.actions.SplitRandomRegionOfTableAction;
43 import org.apache.hadoop.hbase.chaos.monkies.ChaosMonkey;
44 import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey;
45 import org.apache.hadoop.hbase.chaos.policies.CompositeSequentialPolicy;
46 import org.apache.hadoop.hbase.chaos.policies.DoActionsOncePolicy;
47 import org.apache.hadoop.hbase.chaos.policies.PeriodicRandomActionPolicy;
48
49 public class SlowDeterministicMonkeyFactory extends MonkeyFactory {
50
51 private long action1Period;
52 private long action2Period;
53 private long action3Period;
54 private long action4Period;
55 private long moveRegionsMaxTime;
56 private long moveRegionsSleepTime;
57 private long moveRandomRegionSleepTime;
58 private long restartRandomRSSleepTime;
59 private long batchRestartRSSleepTime;
60 private float batchRestartRSRatio;
61 private long restartActiveMasterSleepTime;
62 private long rollingBatchRestartRSSleepTime;
63 private float rollingBatchRestartRSRatio;
64 private long restartRsHoldingMetaSleepTime;
65 private float compactTableRatio;
66 private float compactRandomRegionRatio;
67
68 @Override
69 public ChaosMonkey build() {
70
71 loadProperties();
72
73
74
75 Action[] actions1 = new Action[] {
76 new CompactTableAction(tableName, compactTableRatio),
77 new CompactRandomRegionOfTableAction(tableName, compactRandomRegionRatio),
78 new FlushTableAction(tableName),
79 new FlushRandomRegionOfTableAction(tableName),
80 new MoveRandomRegionOfTableAction(tableName)
81 };
82
83
84
85
86 Action[] actions2 = new Action[] {
87 new SplitRandomRegionOfTableAction(tableName),
88 new MergeRandomAdjacentRegionsOfTableAction(tableName),
89 new SnapshotTableAction(tableName),
90 new AddColumnAction(tableName),
91 new RemoveColumnAction(tableName, columnFamilies),
92 new ChangeEncodingAction(tableName),
93 new ChangeCompressionAction(tableName),
94 new ChangeBloomFilterAction(tableName),
95 new ChangeVersionsAction(tableName)
96 };
97
98
99 Action[] actions3 = new Action[] {
100 new MoveRegionsOfTableAction(moveRegionsSleepTime, moveRegionsMaxTime,
101 tableName),
102 new MoveRandomRegionOfTableAction(moveRandomRegionSleepTime, tableName),
103 new RestartRandomRsAction(restartRandomRSSleepTime),
104 new BatchRestartRsAction(batchRestartRSSleepTime, batchRestartRSRatio),
105 new RestartActiveMasterAction(restartActiveMasterSleepTime),
106 new RollingBatchRestartRsAction(rollingBatchRestartRSSleepTime,
107 rollingBatchRestartRSRatio),
108 new RestartRsHoldingMetaAction(restartRsHoldingMetaSleepTime)
109 };
110
111
112 Action[] actions4 = new Action[] {
113 new DumpClusterStatusAction()
114 };
115
116 return new PolicyBasedChaosMonkey(util,
117 new PeriodicRandomActionPolicy(action1Period, actions1),
118 new PeriodicRandomActionPolicy(action2Period, actions2),
119 new CompositeSequentialPolicy(
120 new DoActionsOncePolicy(action3Period, actions3),
121 new PeriodicRandomActionPolicy(action3Period, actions3)),
122 new PeriodicRandomActionPolicy(action4Period, actions4));
123 }
124
125 private void loadProperties() {
126
127 action1Period = Long.parseLong(this.properties.getProperty(
128 MonkeyConstants.PERIODIC_ACTION1_PERIOD,
129 MonkeyConstants.DEFAULT_PERIODIC_ACTION1_PERIOD + ""));
130 action2Period = Long.parseLong(this.properties.getProperty(
131 MonkeyConstants.PERIODIC_ACTION2_PERIOD,
132 MonkeyConstants.DEFAULT_PERIODIC_ACTION2_PERIOD + ""));
133 action3Period = Long.parseLong(this.properties.getProperty(
134 MonkeyConstants.COMPOSITE_ACTION3_PERIOD,
135 MonkeyConstants.DEFAULT_COMPOSITE_ACTION3_PERIOD + ""));
136 action4Period = Long.parseLong(this.properties.getProperty(
137 MonkeyConstants.PERIODIC_ACTION4_PERIOD,
138 MonkeyConstants.DEFAULT_PERIODIC_ACTION4_PERIOD + ""));
139 moveRegionsMaxTime = Long.parseLong(this.properties.getProperty(
140 MonkeyConstants.MOVE_REGIONS_MAX_TIME,
141 MonkeyConstants.DEFAULT_MOVE_REGIONS_MAX_TIME + ""));
142 moveRegionsSleepTime = Long.parseLong(this.properties.getProperty(
143 MonkeyConstants.MOVE_REGIONS_SLEEP_TIME,
144 MonkeyConstants.DEFAULT_MOVE_REGIONS_SLEEP_TIME + ""));
145 moveRandomRegionSleepTime = Long.parseLong(this.properties.getProperty(
146 MonkeyConstants.MOVE_RANDOM_REGION_SLEEP_TIME,
147 MonkeyConstants.DEFAULT_MOVE_RANDOM_REGION_SLEEP_TIME + ""));
148 restartRandomRSSleepTime = Long.parseLong(this.properties.getProperty(
149 MonkeyConstants.RESTART_RANDOM_RS_SLEEP_TIME,
150 MonkeyConstants.DEFAULT_RESTART_RANDOM_RS_SLEEP_TIME + ""));
151 batchRestartRSSleepTime = Long.parseLong(this.properties.getProperty(
152 MonkeyConstants.BATCH_RESTART_RS_SLEEP_TIME,
153 MonkeyConstants.DEFAULT_BATCH_RESTART_RS_SLEEP_TIME + ""));
154 restartActiveMasterSleepTime = Long.parseLong(this.properties.getProperty(
155 MonkeyConstants.RESTART_ACTIVE_MASTER_SLEEP_TIME,
156 MonkeyConstants.DEFAULT_RESTART_ACTIVE_MASTER_SLEEP_TIME + ""));
157 rollingBatchRestartRSSleepTime = Long.parseLong(this.properties.getProperty(
158 MonkeyConstants.ROLLING_BATCH_RESTART_RS_SLEEP_TIME,
159 MonkeyConstants.DEFAULT_ROLLING_BATCH_RESTART_RS_SLEEP_TIME + ""));
160 rollingBatchRestartRSRatio = Float.parseFloat(this.properties.getProperty(
161 MonkeyConstants.ROLLING_BATCH_RESTART_RS_RATIO,
162 MonkeyConstants.DEFAULT_ROLLING_BATCH_RESTART_RS_RATIO + ""));
163 restartRsHoldingMetaSleepTime = Long.parseLong(this.properties.getProperty(
164 MonkeyConstants.RESTART_RS_HOLDING_META_SLEEP_TIME,
165 MonkeyConstants.DEFAULT_RESTART_RS_HOLDING_META_SLEEP_TIME + ""));
166 compactTableRatio = Float.parseFloat(this.properties.getProperty(
167 MonkeyConstants.COMPACT_TABLE_ACTION_RATIO,
168 MonkeyConstants.DEFAULT_COMPACT_TABLE_ACTION_RATIO + ""));
169 compactRandomRegionRatio = Float.parseFloat(this.properties.getProperty(
170 MonkeyConstants.COMPACT_RANDOM_REGION_RATIO,
171 MonkeyConstants.DEFAULT_COMPACT_RANDOM_REGION_RATIO + ""));
172 }
173 }