diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java index ab3b862123c6997f5a01c6c8f17b8085535d57b4..0bade38db272dcfa913cecbc55fdc1f8f592087d 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java @@ -12,6 +12,7 @@ import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.nio.channels.Channels; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; @@ -181,12 +182,14 @@ class MidlewareTunnel implements Closeable { } sendEOF2Middleware(); } catch (InterruptedIOException e) { + log.error(e.getMessage(), e); return; } catch (SocketException e) { if (!e.getMessage().equals("Socket closed")) { log.error(e.getMessage(), e); } } catch (IOException e) { + log.error(e.getMessage(), e); return; } finally { if (log.isDebugEnabled()) { @@ -196,7 +199,7 @@ class MidlewareTunnel implements Closeable { } private void sendEOF2Middleware() { - dataTransfer.sendDataToJobNode(null, jobId, ipAddress, sessionCode); + dataTransfer.writeDataToJobNode(null, jobId, ipAddress, sessionCode, true); } private boolean sendToMiddleware(byte[] buffer, int len) { @@ -211,7 +214,7 @@ class MidlewareTunnel implements Closeable { } else { sending = buffer; } - int reallySend = dataTransfer.sendDataToJobNode(sending, jobId, ipAddress, sessionCode); + int reallySend = dataTransfer.writeDataToJobNode(sending, jobId, ipAddress, sessionCode, false); if (reallySend == -1) { return false; } @@ -292,7 +295,8 @@ class MidlewareTunnel implements Closeable { private final Runnable[] runnable = new Runnable[2]; - private final Future<?>[] futures = new Future[2]; + + private final CompletableFuture<?>[] futures = new CompletableFuture[2]; private final CountDownLatch latchFromClient = new CountDownLatch(1); @@ -318,13 +322,17 @@ class MidlewareTunnel implements Closeable { for (int i = 0; i < runnable.length; i++) { int final_i = i; - futures[i] = executorService.submit(() -> { + futures[i] = CompletableFuture.runAsync(() -> { runnable[final_i].run(); - if(final_i == FROM_CLIENT) { + }, executorService).whenComplete((id,e) -> { + if (final_i == FROM_CLIENT) { latchFromClient.countDown(); } + latchOfBothDirections.countDown(); - return null; + if(e != null) { + log.error(e.getMessage(), e); + } }); } diff --git a/haas-java-client/src/main/resources/META-INF/wsdl/DataTransferWs.wsdl b/haas-java-client/src/main/resources/META-INF/wsdl/DataTransferWs.wsdl index dfa4897e697c864092a25a99fc3d62cb97449a4b..d036153118e6cd2550d3395724e63fb4cb27a01c 100644 --- a/haas-java-client/src/main/resources/META-INF/wsdl/DataTransferWs.wsdl +++ b/haas-java-client/src/main/resources/META-INF/wsdl/DataTransferWs.wsdl @@ -37,20 +37,21 @@ <s:element name="EndDataTransferResponse"> <s:complexType/> </s:element> - <s:element name="SendDataToJobNode"> + <s:element name="WriteDataToJobNode"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="data" type="s:base64Binary"/> <s:element minOccurs="1" maxOccurs="1" name="submittedJobInfoId" type="s:long"/> <s:element minOccurs="0" maxOccurs="1" name="ipAddress" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="sessionCode" type="s:string"/> + <s:element minOccurs="1" maxOccurs="1" name="closeConnection" type="s:boolean"/> </s:sequence> </s:complexType> </s:element> - <s:element name="SendDataToJobNodeResponse"> + <s:element name="WriteDataToJobNodeResponse"> <s:complexType> <s:sequence> - <s:element minOccurs="1" maxOccurs="1" name="SendDataToJobNodeResult" type="s:int"/> + <s:element minOccurs="1" maxOccurs="1" name="WriteDataToJobNodeResult" type="s:int"/> </s:sequence> </s:complexType> </s:element> @@ -84,11 +85,11 @@ <wsdl:message name="EndDataTransferSoapOut"> <wsdl:part name="parameters" element="tns:EndDataTransferResponse"/> </wsdl:message> - <wsdl:message name="SendDataToJobNodeSoapIn"> - <wsdl:part name="parameters" element="tns:SendDataToJobNode"/> + <wsdl:message name="WriteDataToJobNodeSoapIn"> + <wsdl:part name="parameters" element="tns:WriteDataToJobNode"/> </wsdl:message> - <wsdl:message name="SendDataToJobNodeSoapOut"> - <wsdl:part name="parameters" element="tns:SendDataToJobNodeResponse"/> + <wsdl:message name="WriteDataToJobNodeSoapOut"> + <wsdl:part name="parameters" element="tns:WriteDataToJobNodeResponse"/> </wsdl:message> <wsdl:message name="ReadDataFromJobNodeSoapIn"> <wsdl:part name="parameters" element="tns:ReadDataFromJobNode"/> @@ -105,9 +106,9 @@ <wsdl:input message="tns:EndDataTransferSoapIn"/> <wsdl:output message="tns:EndDataTransferSoapOut"/> </wsdl:operation> - <wsdl:operation name="SendDataToJobNode"> - <wsdl:input message="tns:SendDataToJobNodeSoapIn"/> - <wsdl:output message="tns:SendDataToJobNodeSoapOut"/> + <wsdl:operation name="WriteDataToJobNode"> + <wsdl:input message="tns:WriteDataToJobNodeSoapIn"/> + <wsdl:output message="tns:WriteDataToJobNodeSoapOut"/> </wsdl:operation> <wsdl:operation name="ReadDataFromJobNode"> <wsdl:input message="tns:ReadDataFromJobNodeSoapIn"/> @@ -134,8 +135,8 @@ <soap:body use="literal"/> </wsdl:output> </wsdl:operation> - <wsdl:operation name="SendDataToJobNode"> - <soap:operation soapAction="http://hpcaas.it4i.cz/SendDataToJobNode" style="document"/> + <wsdl:operation name="WriteDataToJobNode"> + <soap:operation soapAction="http://hpcaas.it4i.cz/WriteDataToJobNode" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> @@ -173,8 +174,8 @@ <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> - <wsdl:operation name="SendDataToJobNode"> - <soap12:operation soapAction="http://hpcaas.it4i.cz/SendDataToJobNode" style="document"/> + <wsdl:operation name="WriteDataToJobNode"> + <soap12:operation soapAction="http://hpcaas.it4i.cz/WriteDataToJobNode" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input>