private void backoff(String message) { if (trigger.getPeriod() > 0 && trigger.getPeriod() < Duration.ofMillis(maxPeriod).toMillis()) { Duration duration = Duration.ofMillis(trigger.getPeriod()); if (duration.multipliedBy(BACKOFF_MULTIPLE).compareTo(Duration.ofMillis(maxPeriod)) <= 0) { //If d >= 1, round to 1 seconds. if (duration.getSeconds() == 1) { duration = duration.ofSeconds(1); } duration = duration.multipliedBy(BACKOFF_MULTIPLE); } else { duration = Duration.ofMillis(maxPeriod); } if (trigger.getPeriod() < 1000) { log.info(String.format(message + " - increasing polling period to %d ms.", duration.toMillis())); } else { log.info(String.format(message + "- increasing polling period to %d seconds.", duration.getSeconds())); } trigger.setPeriod(duration.toMillis()); } else if (trigger.getPeriod() == Duration.ofMillis(maxPeriod).toMillis()){ log.info(message); } }
ScheduledFuture<?> consume() { return taskScheduler.schedule(() -> { if (!isRunning()) { return; } if (serverIsAcceptingNewTasks()) { if (paused.compareAndSet(true, false)) { log.info("Polling resumed"); } if (!input.poll(message -> { LaunchRequest request = (LaunchRequest) message.getPayload(); log.debug("Received a Task launch request - task name: " + request.getTaskName()); launchTask(request); }, new ParameterizedTypeReference<LaunchRequest>() { })) { backoff("No task launch request received"); } else { if (trigger.getPeriod() > initialPeriod) { trigger.setPeriod(initialPeriod); log.info(String.format("Polling period reset to %d ms.", trigger.getPeriod())); } } } else { paused.set(true); backoff("Polling paused"); } }, trigger); }