diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java index 1339125d..e4df949a 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java @@ -9,7 +9,6 @@ import java.time.InstantSource; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.concurrent.ExecutionException; import org.apache.commons.lang3.StringUtils; @@ -111,7 +110,7 @@ public class HttpGetter { } int code = response.getCode(); - if (Set.of(HttpStatus.SC_TOO_MANY_REQUESTS, HttpStatus.SC_SERVICE_UNAVAILABLE).contains(code) && response.getRetryAfter() != null) { + if (code == HttpStatus.SC_TOO_MANY_REQUESTS || code == HttpStatus.SC_SERVICE_UNAVAILABLE && response.getRetryAfter() != null) { throw new TooManyRequestsException(response.getRetryAfter()); } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshIntervalCalculator.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshIntervalCalculator.java index 48051719..d71d39fa 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshIntervalCalculator.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshIntervalCalculator.java @@ -4,6 +4,8 @@ import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; +import org.apache.commons.lang3.ObjectUtils; + import com.commafeed.CommaFeedConfiguration; import jakarta.inject.Singleton; @@ -29,6 +31,16 @@ public class FeedRefreshIntervalCalculator { return onFetchSuccess(publishedDate, averageEntryInterval); } + public Instant onTooManyRequests(Instant retryAfter) { + Instant defaultRefreshInterval = getDefaultRefreshInterval(); + + if (retryAfter == null) { + return defaultRefreshInterval; + } + + return ObjectUtils.max(retryAfter, defaultRefreshInterval); + } + public Instant onFetchError(int errorCount) { int retriesBeforeDisable = 3; if (errorCount < retriesBeforeDisable || !empiricalInterval) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java index a6533606..83049260 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java @@ -104,7 +104,7 @@ public class FeedRefreshWorker { feed.setErrorCount(feed.getErrorCount() + 1); feed.setMessage("Server indicated that we are sending too many requests"); - feed.setDisabledUntil(e.getRetryAfter()); + feed.setDisabledUntil(refreshIntervalCalculator.onTooManyRequests(e.getRetryAfter())); return new FeedRefreshWorkerResult(feed, Collections.emptyList()); } catch (Exception e) {