[hue] API v1: retry once on timeout for GET requests to the bridge (#16902)

Fix #16723

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
This commit is contained in:
lolodomo 2024-06-22 12:01:30 +02:00 committed by GitHub
parent 4f64bb9e5e
commit d2466d53d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1096,6 +1096,11 @@ public class HueBridge {
private HueResult doNetwork(String address, HttpMethod requestMethod, @Nullable String body)
throws ConfigurationException, CommunicationException {
return doNetwork(address, requestMethod, body, requestMethod == HttpMethod.GET);
}
private HueResult doNetwork(String address, HttpMethod requestMethod, @Nullable String body, boolean retryOnTimeout)
throws ConfigurationException, CommunicationException {
logger.trace("Hue request: {} - URL = '{}'", requestMethod, address);
try {
final Request request = httpClient.newRequest(address).method(requestMethod).timeout(timeout,
@ -1123,9 +1128,14 @@ public class HueBridge {
e.getCause());
}
} catch (TimeoutException e) {
String message = e.getMessage();
logger.debug("TimeoutException occurred during execution: {}", message, e);
throw new CommunicationException(message == null ? TEXT_OFFLINE_COMMUNICATION_ERROR : message);
if (retryOnTimeout) {
logger.debug("TimeoutException occurred during execution, retry");
return doNetwork(address, requestMethod, body, false);
} else {
String message = e.getMessage();
logger.debug("TimeoutException occurred during execution: {}", message, e);
throw new CommunicationException(message == null ? TEXT_OFFLINE_COMMUNICATION_ERROR : message);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
String message = e.getMessage();