diff --git a/Exareme-Docker/files/root/exareme/convert-csv-dataset-to-db.py b/Exareme-Docker/files/root/exareme/convert-csv-dataset-to-db.py index 9bffa3fb6..4ad341440 100755 --- a/Exareme-Docker/files/root/exareme/convert-csv-dataset-to-db.py +++ b/Exareme-Docker/files/root/exareme/convert-csv-dataset-to-db.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 # -*- coding: utf-8 -*- """ diff --git a/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/Exceptions/RequestException.java b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/Exceptions/RequestException.java new file mode 100644 index 000000000..cecd101d1 --- /dev/null +++ b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/Exceptions/RequestException.java @@ -0,0 +1,7 @@ +package madgik.exareme.master.gateway.async.handler.HBP.Exceptions; + +public class RequestException extends Exception { + public RequestException(String algorithmName, String message) { + super(message + " Algorithm: " + algorithmName); + } +} \ No newline at end of file diff --git a/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/HBPQueryHandler.java b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/HBPQueryHandler.java index bbc7c6b95..e48228f53 100644 --- a/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/HBPQueryHandler.java +++ b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/async/handler/HBP/HBPQueryHandler.java @@ -1,6 +1,5 @@ package madgik.exareme.master.gateway.async.handler.HBP; -import com.google.gson.JsonSyntaxException; import madgik.exareme.common.consts.HBPConstants; import madgik.exareme.master.client.AdpDBClient; import madgik.exareme.master.client.AdpDBClientFactory; @@ -14,12 +13,12 @@ import madgik.exareme.master.engine.iterations.handler.NIterativeAlgorithmResultEntity; import madgik.exareme.master.engine.iterations.state.IterativeAlgorithmState; import madgik.exareme.master.gateway.ExaremeGatewayUtils; +import madgik.exareme.master.gateway.async.handler.HBP.Exceptions.RequestException; import madgik.exareme.master.gateway.async.handler.HBP.Exceptions.UserException; import madgik.exareme.master.gateway.async.handler.entity.NQueryResultEntity; import madgik.exareme.master.queryProcessor.HBP.AlgorithmProperties; import madgik.exareme.master.queryProcessor.HBP.Algorithms; import madgik.exareme.master.queryProcessor.HBP.Composer; -import madgik.exareme.master.queryProcessor.HBP.Exceptions.AlgorithmException; import madgik.exareme.worker.art.container.ContainerProxy; import org.apache.http.*; import org.apache.http.entity.BasicHttpEntity; @@ -100,9 +99,14 @@ private void handleHBPAlgorithmExecution(HttpRequest request, HttpResponse respo preExecutionChecks(request); String algorithmName = getAlgorithmName(request); + AlgorithmProperties algorithmProperties = Algorithms.getInstance().getAlgorithmProperties(algorithmName); + if (algorithmProperties == null) + throw new RequestException(algorithmName, "The algorithm '" + algorithmName + "' does not exist."); + String algorithmKey = algorithmName + "_" + System.currentTimeMillis(); - log.info("Executing algorithm: " + algorithmName + " with key: " + algorithmKey); + // Logging the algorithm execution parameters + log.info("Executing algorithm: " + algorithmName + " with key: " + algorithmKey); HashMap algorithmParameters = HBPQueryHelper.getAlgorithmParameters(request); log.info("Request for algorithm: " + algorithmName); if (algorithmParameters != null) { @@ -114,10 +118,6 @@ private void handleHBPAlgorithmExecution(HttpRequest request, HttpResponse respo AdpDBClientQueryStatus queryStatus; - AlgorithmProperties algorithmProperties = Algorithms.getInstance().getAlgorithmProperties(algorithmName); - if (algorithmProperties == null) - throw new AlgorithmException(algorithmName, "The algorithm '" + algorithmName + "' does not exist."); - algorithmProperties.mergeWithAlgorithmParameters(algorithmParameters); DataSerialization ds = DataSerialization.summary; @@ -167,27 +167,27 @@ private void handleHBPAlgorithmExecution(HttpRequest request, HttpResponse respo response.setStatusCode(HttpStatus.SC_OK); response.setEntity(entity); } - } catch (IterationsFatalException e) { - log.error(e); - if (e.getErroneousAlgorithmKey() != null) - iterationsHandler.removeIterativeAlgorithmStateInstanceFromISM( - e.getErroneousAlgorithmKey()); - log.error(e); - String errorType = HBPQueryHelper.ErrorResponse.ErrorResponseTypes.error; - response.setStatusCode(HttpStatus.SC_BAD_REQUEST); + } catch (UserException e) { + log.error(e.getMessage()); + String errorType = HBPQueryHelper.ErrorResponse.ErrorResponseTypes.user_error; + response.setStatusCode(HttpStatus.SC_OK); response.setEntity(createErrorResponseEntity(e.getMessage(), errorType)); - } catch (UserException e) { + } catch (RequestException e) { log.error(e.getMessage()); String errorType = HBPQueryHelper.ErrorResponse.ErrorResponseTypes.user_error; response.setStatusCode(HttpStatus.SC_BAD_REQUEST); response.setEntity(createErrorResponseEntity(e.getMessage(), errorType)); - } catch (JsonSyntaxException e) { - log.error("Could not parse the algorithms properly."); + } catch (IterationsFatalException e) { + log.error(e); + if (e.getErroneousAlgorithmKey() != null) + iterationsHandler.removeIterativeAlgorithmStateInstanceFromISM( + e.getErroneousAlgorithmKey()); + log.error(e); String errorType = HBPQueryHelper.ErrorResponse.ErrorResponseTypes.error; - response.setStatusCode(HttpStatus.SC_BAD_REQUEST); - response.setEntity(createErrorResponseEntity(serverErrorOccurred, errorType)); + response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR); + response.setEntity(createErrorResponseEntity(e.getMessage(), errorType)); } catch (Exception e) { log.error(e.getMessage()); @@ -197,7 +197,7 @@ private void handleHBPAlgorithmExecution(HttpRequest request, HttpResponse respo } log.error(e.getStackTrace()); String errorType = HBPQueryHelper.ErrorResponse.ErrorResponseTypes.error; - response.setStatusCode(HttpStatus.SC_BAD_REQUEST); + response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR); response.setEntity(createErrorResponseEntity(serverErrorOccurred, errorType)); } } diff --git a/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/control/handler/HttpAsyncCheckWorker.java b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/control/handler/HttpAsyncCheckWorker.java index d320049f9..5274c9f9e 100644 --- a/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/control/handler/HttpAsyncCheckWorker.java +++ b/Exareme-Docker/src/exareme/exareme-master/src/main/java/madgik/exareme/master/gateway/control/handler/HttpAsyncCheckWorker.java @@ -9,6 +9,7 @@ import madgik.exareme.master.engine.AdpDBManager; import madgik.exareme.master.engine.AdpDBManagerLocator; import madgik.exareme.master.gateway.ExaremeGatewayUtils; +import madgik.exareme.master.gateway.async.handler.HBP.Exceptions.RequestException; import madgik.exareme.master.gateway.async.handler.HBP.Exceptions.UserException; import madgik.exareme.master.gateway.async.handler.entity.NQueryResultEntity; import madgik.exareme.master.queryProcessor.HBP.AlgorithmProperties; @@ -54,7 +55,7 @@ public void handle( HttpResponse response = httpexchange.getResponse(); try { handleInternal(request, response, context); - } catch (AlgorithmException | CDEsMetadataException | ComposerException | UserException e) { + } catch (AlgorithmException | CDEsMetadataException | ComposerException | UserException | RequestException e) { e.printStackTrace(); } httpexchange.submitResponse(new BasicAsyncResponseProducer(response)); @@ -64,7 +65,7 @@ private void handleInternal( final HttpRequest request, final HttpResponse response, final HttpContext context - ) throws HttpException, IOException, AlgorithmException, CDEsMetadataException, ComposerException, UserException { + ) throws HttpException, IOException, AlgorithmException, CDEsMetadataException, ComposerException, UserException, RequestException { String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH); if (!method.equals("GET") && !method.equals("HEAD") && !method.equals("POST")) { @@ -87,7 +88,7 @@ private void handleInternal( AlgorithmProperties algorithmProperties = Algorithms.getInstance().getAlgorithmProperties(algorithmName); if (algorithmProperties == null) - throw new AlgorithmException(algorithmName, "The algorithm does not exist."); + throw new RequestException(algorithmName, "The algorithm does not exist."); algorithmProperties.mergeWithAlgorithmParameters(inputContent);