diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.java index 28f87664f7f7..ead5ccea51b2 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.java @@ -17,7 +17,6 @@ */ package org.apache.hadoop.hbase.chaos.monkies; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -31,8 +30,6 @@ import org.apache.hadoop.hbase.IntegrationTestingUtility; import org.apache.hadoop.hbase.chaos.policies.Policy; import org.apache.hadoop.hbase.util.Pair; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -40,7 +37,6 @@ * Chaos monkey that given multiple policies will run actions against the cluster. */ public class PolicyBasedChaosMonkey extends ChaosMonkey { - private static final Logger LOG = LoggerFactory.getLogger(PolicyBasedChaosMonkey.class); private static final long ONE_SEC = 1000; private static final long ONE_MIN = 60 * ONE_SEC; @@ -120,31 +116,13 @@ public static T selectWeightedRandomItem(List> items) { /** Selects and returns ceil(ratio * items.length) random items from the given array */ public static List selectRandomItems(T[] items, float ratio) { - /* - * N.b. `ratio` values are not validated. Be aware of excessive values and floating point - * arithmetic rounding. Guard against negative input to Random#next() and exceeding boundaries - * in call to List#subList. - */ + int selectedNumber = (int) Math.ceil(items.length * ratio); - // clamp ratio to [0.0,1.0] - ratio = Math.max(Math.min(ratio, 1.0f), 0.0f); + List originalItems = Arrays.asList(items); + Collections.shuffle(originalItems); - final int selectedNumber = (int) Math.ceil(items.length * ratio); - - // shuffle a copy of the input, not the input. - final List shuffledItems = new ArrayList<>(items.length); - shuffledItems.addAll(Arrays.asList(items)); - Collections.shuffle(shuffledItems); - - if (selectedNumber >= items.length) { - return shuffledItems; - } - - // apply basic sanity check on sublist selection range. - final int startIndex = - Math.max(0, ThreadLocalRandom.current().nextInt(items.length - selectedNumber)); - final int endIndex = Math.min(items.length, startIndex + selectedNumber); - return shuffledItems.subList(startIndex, endIndex); + int startIndex = ThreadLocalRandom.current().nextInt(items.length - selectedNumber); + return originalItems.subList(startIndex, startIndex + selectedNumber); } @Override @@ -173,10 +151,7 @@ public boolean isStopped() { @Override public void waitForStop() throws InterruptedException { - if (!monkeyThreadPool.awaitTermination(1, TimeUnit.MINUTES)) { - LOG.warn("Some pool threads failed to terminate. Forcing. {}", monkeyThreadPool); - monkeyThreadPool.shutdownNow(); - } + monkeyThreadPool.awaitTermination(1, TimeUnit.MINUTES); } @Override