From a08ea27c2f1c4f58b9cdede028883458d7be9337 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 25 May 2023 09:02:01 +0200 Subject: [PATCH] make sure we don't refresh a feed twice in a row --- .../backend/feed/FeedRefreshEngine.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java index 8b01ecf7..c5e1c31f 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java @@ -119,14 +119,24 @@ public class FeedRefreshEngine implements Managed { } public void refreshImmediately(Feed feed) { + // remove the feed from the queue if it was already queued to avoid refreshing it twice + queue.removeIf(f -> f.getId().equals(feed.getId())); queue.addFirst(feed); } private void refillQueueAsync() { CompletableFuture.runAsync(() -> { - if (queue.isEmpty()) { - refill.mark(); - queue.addAll(getNextUpdatableFeeds(getBatchSize())); + if (!queue.isEmpty()) { + return; + } + + refill.mark(); + + for (Feed feed : getNextUpdatableFeeds(getBatchSize())) { + // add the feed only if it was not already queued + if (queue.stream().noneMatch(f -> f.getId().equals(feed.getId()))) { + queue.addLast(feed); + } } }, refillExecutor).whenComplete((data, ex) -> { if (ex != null) {