From ec6db75e8d3dfed118edbcab89213f23cb49b2a9 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sun, 24 Dec 2023 00:48:53 +0100 Subject: [PATCH] feat: custom retry strategy for broken Retry-After values --- .../jskolengo/JSkolengoAnonymous.java | 3 ++- .../jskolengo/SkolengoRetryStrategy.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 wrapper/src/main/java/me/vinceh121/jskolengo/SkolengoRetryStrategy.java diff --git a/wrapper/src/main/java/me/vinceh121/jskolengo/JSkolengoAnonymous.java b/wrapper/src/main/java/me/vinceh121/jskolengo/JSkolengoAnonymous.java index 6ecf0ce..5c246db 100644 --- a/wrapper/src/main/java/me/vinceh121/jskolengo/JSkolengoAnonymous.java +++ b/wrapper/src/main/java/me/vinceh121/jskolengo/JSkolengoAnonymous.java @@ -20,7 +20,8 @@ public class JSkolengoAnonymous extends AbstractSkolengo { public JSkolengoAnonymous() { - super(HttpClients.createDefault(), new ObjectMapper().registerModule(new JavaTimeModule())); + super(HttpClients.custom().setRetryStrategy(new SkolengoRetryStrategy()).build(), + new ObjectMapper().registerModule(new JavaTimeModule())); } public JSkolengoAnonymous(CloseableHttpClient client, ObjectMapper mapper, ResourceConverter converter) { diff --git a/wrapper/src/main/java/me/vinceh121/jskolengo/SkolengoRetryStrategy.java b/wrapper/src/main/java/me/vinceh121/jskolengo/SkolengoRetryStrategy.java new file mode 100644 index 0000000..bdf19ab --- /dev/null +++ b/wrapper/src/main/java/me/vinceh121/jskolengo/SkolengoRetryStrategy.java @@ -0,0 +1,22 @@ +package me.vinceh121.jskolengo; + +import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.util.TimeValue; + +/** + * Certain endpoints like /evaluation-services return a 503 + Retry-After, + * triggering the retry strategy. However, the value in the header is + * erroneously specified in milliseconds instead of seconds + */ +public class SkolengoRetryStrategy extends DefaultHttpRequestRetryStrategy { + public SkolengoRetryStrategy() { + super(50, TimeValue.ofMilliseconds(500)); + } + + @Override + public TimeValue getRetryInterval(HttpResponse response, int execCount, HttpContext context) { + return super.getRetryInterval(response, execCount, context).divide(1000); + } +}