From f015ff2c2ac6857f33b5726f07b59051478e34aa Mon Sep 17 00:00:00 2001 From: Alexander Reelsen Date: Tue, 21 Aug 2018 09:38:23 +0200 Subject: [PATCH 1/2] Watcher: Simplify finding next date in cron schedule The code introduced in 3fa36807f87ad90af593e86f9ed843ced3260973 to fix an issue with crons always returning -1 was not very readable. This implementation uses streams to improve readability. --- .../trigger/schedule/CronnableSchedule.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java index 695c9b192eaa6..be41ce4b564bd 100644 --- a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java +++ b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java @@ -30,19 +30,13 @@ private CronnableSchedule(Cron... crons) { @Override public long nextScheduledTimeAfter(long startTime, long time) { assert time >= startTime; - long nextTime = Long.MAX_VALUE; - for (Cron cron : crons) { - long nextValidTimeAfter = cron.getNextValidTimeAfter(time); - - boolean previousCronExpired = nextTime == -1; - boolean currentCronValid = nextValidTimeAfter > -1; - if (previousCronExpired && currentCronValid) { - nextTime = nextValidTimeAfter; - } else { - nextTime = Math.min(nextTime, nextValidTimeAfter); - } - } - return nextTime; + return Arrays.stream(crons) + .map(cron -> cron.getNextValidTimeAfter(time)) + // filter out expired dates before sorting + .filter(nextValidTime -> nextValidTime > -1) + .sorted() + // no date in the future found, return -1 to the caller + .findFirst().orElse(-1L); } public Cron[] crons() { From 9f87bd64386e71b3429a82ba1c3e9ad2a25506d9 Mon Sep 17 00:00:00 2001 From: Alexander Reelsen Date: Mon, 27 Aug 2018 16:16:32 +0200 Subject: [PATCH 2/2] review comment --- .../xpack/watcher/trigger/schedule/CronnableSchedule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java index be41ce4b564bd..1e6285f71d781 100644 --- a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java +++ b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/trigger/schedule/CronnableSchedule.java @@ -35,8 +35,9 @@ public long nextScheduledTimeAfter(long startTime, long time) { // filter out expired dates before sorting .filter(nextValidTime -> nextValidTime > -1) .sorted() + .findFirst() // no date in the future found, return -1 to the caller - .findFirst().orElse(-1L); + .orElse(-1L); } public Cron[] crons() {