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