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.policies;
20
21 import org.apache.commons.lang.math.RandomUtils;
22 import org.apache.hadoop.hbase.util.Threads;
23
24
25 public abstract class PeriodicPolicy extends Policy {
26 private long periodMs;
27
28 public PeriodicPolicy(long periodMs) {
29 this.periodMs = periodMs;
30 }
31
32 @Override
33 public void run() {
34
35 int jitter = RandomUtils.nextInt((int) periodMs);
36 LOG.info("Sleeping for " + jitter + " to add jitter");
37 Threads.sleep(jitter);
38
39 while (!isStopped()) {
40 long start = System.currentTimeMillis();
41 runOneIteration();
42
43 if (isStopped()) return;
44 long sleepTime = periodMs - (System.currentTimeMillis() - start);
45 if (sleepTime > 0) {
46 LOG.info("Sleeping for: " + sleepTime);
47 Threads.sleep(sleepTime);
48 }
49 }
50 }
51
52 protected abstract void runOneIteration();
53
54 @Override
55 public void init(PolicyContext context) throws Exception {
56 super.init(context);
57 LOG.info("Using ChaosMonkey Policy: " + this.getClass() + ", period: " + periodMs);
58 }
59 }