]> git.basschouten.com Git - openhab-addons.git/commitdiff
[hue] API v1: retry once on timeout for GET requests to the bridge (#16902)
authorlolodomo <lg.hc@free.fr>
Sat, 22 Jun 2024 10:01:30 +0000 (12:01 +0200)
committerGitHub <noreply@github.com>
Sat, 22 Jun 2024 10:01:30 +0000 (12:01 +0200)
Fix #16723

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/connection/HueBridge.java

index 70a7eca096aab1dfd24926de084b1b806861e8ad..2f6acf0fac9158497170dd5adb8f030cb86b8e96 100644 (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();