public static boolean injectNonExistentCoreExceptionAfterUnload(String cname) { if (nonExistentCoreExceptionAfterUnload != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(nonExistentCoreExceptionAfterUnload); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { throw new NonExistentCoreException("Core not found to unload: " + cname); } } return true; }
public static boolean injectFailUpdateRequests() { if (failUpdateRequests != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(failUpdateRequests); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { throw new SolrException(ErrorCode.SERVER_ERROR, "Random test update fail"); } } return true; }
public static boolean injectSplitFailureBeforeReplicaCreation() { if (splitFailureBeforeReplicaCreation != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(splitFailureBeforeReplicaCreation); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { log.info("Injecting failure in creating replica for sub-shard"); throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to create replica"); } } return true; }
public static boolean injectNonGracefullClose(CoreContainer cc) { if (cc.isShutDown() && nonGracefullClose != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(nonGracefullClose); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { if (rand.nextBoolean()) { throw new TestShutdownFailError("Test exception for non graceful close"); } else { final Thread cthread = Thread.currentThread(); TimerTask task = new TimerTask() { @Override public void run() { // as long as places that catch interruptedexception reset that // interrupted status, // we should only need to do it once try { // call random() again to get the correct one for this thread Random taskRand = random(); Thread.sleep(taskRand.nextInt(1000)); } catch (InterruptedException e) { } cthread.interrupt(); timers.remove(this); cancel(); } }; Timer timer = new Timer(); timers.add(timer); timer.schedule(task, rand.nextInt(500)); } } } return true; }
public List<QueueEvent> peekTopN(int n, Predicate<String> excludeSet, long waitMillis) throws KeeperException, InterruptedException { ArrayList<QueueEvent> topN = new ArrayList<>(); LOG.debug("Peeking for top {} elements. ExcludeSet: {}", n, excludeSet); Timer.Context time; if (waitMillis == Long.MAX_VALUE) time = stats.time(dir + "_peekTopN_wait_forever"); else time = stats.time(dir + "_peekTopN_wait" + waitMillis); try { for (Pair<String, byte[]> element : peekElements(n, waitMillis, child -> !excludeSet.test(dir + "/" + child))) { topN.add(new QueueEvent(dir + "/" + element.first(), element.second(), null)); } printQueueEventsListElementIds(topN); return topN; } finally { time.stop(); } }
public static boolean injectRandomDelayInCoreCreation() { if (randomDelayInCoreCreation != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(randomDelayInCoreCreation); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { int delay = rand.nextInt(randomDelayMaxInCoreCreationInSec); log.info("Inject random core creation delay of {}s", delay); try { Thread.sleep(delay * 1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } return true; }
public static boolean injectUpdateRandomPause() { if (updateRandomPause != null) { Random rand = random(); if (null == rand) return true; Pair<Boolean, Integer> pair = parseValue(updateRandomPause); boolean enabled = pair.first(); int chanceIn100 = pair.second(); if (enabled && rand.nextInt(100) >= (100 - chanceIn100)) { long rndTime = rand.nextInt(1000); log.info("inject random update delay of {}ms", rndTime); try { Thread.sleep(rndTime); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } return true; }