From 778dc6e25caa5ae6852fd88880b8540fc1e901b4 Mon Sep 17 00:00:00 2001 From: LSmyrnaios Date: Tue, 3 Jan 2023 18:43:26 +0200 Subject: [PATCH] - Improve the stability of "UriBuilder.getPublicIP()", by using a "HttpURLConnection" to increase the connection and read timeouts and avoid timeout-exceptions. - Show the number of assignments which are requested from the Controller, in the log-message. - Update Spring. --- build.gradle | 2 +- .../controllers/FullTextsController.java | 2 +- .../urls_worker/util/AssignmentsHandler.java | 2 +- .../openaire/urls_worker/util/UriBuilder.java | 23 +++++++++++-------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 74970a7..6d60d48 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '2.7.6' + id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.1.0' id 'java' } diff --git a/src/main/java/eu/openaire/urls_worker/controllers/FullTextsController.java b/src/main/java/eu/openaire/urls_worker/controllers/FullTextsController.java index cc3563c..751db4e 100644 --- a/src/main/java/eu/openaire/urls_worker/controllers/FullTextsController.java +++ b/src/main/java/eu/openaire/urls_worker/controllers/FullTextsController.java @@ -39,7 +39,7 @@ public class FullTextsController { public Object getMultipleFullTexts(@PathVariable long assignmentsCounter, @PathVariable int totalZipBatches, @PathVariable int zipBatchCounter, @PathVariable List fileNamesWithExtensions) { int fileNamesListNum = fileNamesWithExtensions.size(); - if ( (fileNamesListNum == 1) && (fileNamesWithExtensions.get(0).length() == 0) ) { // In case the last "/" in the url was given, then this list will not be empty, but have one empty item instead. + if ( (fileNamesListNum == 1) && (fileNamesWithExtensions.get(0).length() == 0) ) { // In case the last "/" in the url was given (without any files following), then this list will not be empty, but have one empty item instead. // In case the url does not end in "/", then Spring will automatically return an "HTTP-BadRequest". String errorMsg = "An empty \"fileNamesWithExtensions\" list was given from assignments_" + assignmentsCounter + ", for batch_" + zipBatchCounter; logger.error(errorMsg); diff --git a/src/main/java/eu/openaire/urls_worker/util/AssignmentsHandler.java b/src/main/java/eu/openaire/urls_worker/util/AssignmentsHandler.java index 72120be..3217ec1 100644 --- a/src/main/java/eu/openaire/urls_worker/util/AssignmentsHandler.java +++ b/src/main/java/eu/openaire/urls_worker/util/AssignmentsHandler.java @@ -67,7 +67,7 @@ public class AssignmentsHandler { public static AssignmentsRequest requestAssignments() { - logger.info("Going to request assignments from the controller-server: " + requestUrl); + logger.info("Going to request " + UrlsWorkerApplication.maxAssignmentsLimitPerBatch + " assignments from the controller-server: " + requestUrl); AssignmentsRequest assignmentRequest = null; try { // Here, the HTTP-request is executed. diff --git a/src/main/java/eu/openaire/urls_worker/util/UriBuilder.java b/src/main/java/eu/openaire/urls_worker/util/UriBuilder.java index 1ddcaad..e144b32 100644 --- a/src/main/java/eu/openaire/urls_worker/util/UriBuilder.java +++ b/src/main/java/eu/openaire/urls_worker/util/UriBuilder.java @@ -8,8 +8,8 @@ import org.springframework.core.env.Environment; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.InetAddress; -import java.net.MalformedURLException; import java.net.URL; public class UriBuilder { @@ -55,19 +55,24 @@ public class UriBuilder { private static String getPublicIP() { String publicIpAddress = ""; - URL url_name; + HttpURLConnection conn = null; try { - url_name = new URL("https://api.ipify.org/"); - } catch (MalformedURLException mue) { - logger.warn(mue.getMessage()); - return null; - } - try ( BufferedReader bf = new BufferedReader(new InputStreamReader(url_name.openStream()))) { - publicIpAddress = bf.readLine().trim(); + conn = (HttpURLConnection) new URL("https://api.ipify.org/").openConnection(); + conn.setConnectTimeout(60_000); + conn.setReadTimeout(60_000); + conn.setRequestMethod("GET"); + conn.connect(); + try ( BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { + publicIpAddress = bf.readLine().trim(); + } } catch (Exception e) { logger.warn("Cannot get the publicIP address for this machine!", e); return null; + } finally { + if ( conn != null ) + conn.disconnect(); } + return publicIpAddress; }