From 7a519aabbaba366cb60352290519d6d8b5c50905 Mon Sep 17 00:00:00 2001 From: Stefan Triller Date: Fri, 31 Dec 2021 11:46:36 +0100 Subject: [PATCH] [iCalendar] Fix httpclient getting stuck with broken requests (#11866) * [iCalendar] Fix httpclient getting stuck with broken requests Fixes #9827 Signed-off-by: Stefan Triller --- .../icalendar/internal/handler/PullJob.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java index 045100cc6f443..65db2a29caea4 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java @@ -102,22 +102,25 @@ public void run() { try { response = asyncListener.get(HTTP_TIMEOUT_SECS, TimeUnit.SECONDS); } catch (InterruptedException e1) { - logger.warn("Download of calendar was interrupted."); - logger.debug("InterruptedException message is: {}", e1.getMessage()); + logger.warn("Download of calendar was interrupted: {}", e1.getMessage()); + request.abort(e1.getCause() != null ? e1.getCause() : e1); return; } catch (TimeoutException e1) { - logger.warn("Download of calendar timed out (waited too long for headers)."); - logger.debug("TimeoutException message is: {}", e1.getMessage()); + logger.warn("Download of calendar timed out (waited too long for headers): {}", e1.getMessage()); + request.abort(e1.getCause() != null ? e1.getCause() : e1); return; } catch (ExecutionException e1) { - logger.warn("Download of calendar failed."); - logger.debug("ExecutionException message is: {}", e1.getCause().getMessage()); + String msg = e1.getCause() != null ? e1.getCause().getMessage() : ""; + logger.warn("Download of calendar failed with ExecutionException: {}", msg); + request.abort(e1.getCause() != null ? e1.getCause() : e1); return; } if (response.getStatus() != HttpStatus.OK_200) { logger.warn("Response status for getting \"{}\" was {} instead of 200. Ignoring it.", sourceURI, response.getStatus()); + request.abort(new IllegalStateException( + "Got response status " + response.getStatus() + " while requesting " + sourceURI)); return; }