This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 7b1a724b1653115c5fc4d46e44e1ced715957133 Author: Murtadha Hubail <[email protected]> AuthorDate: Wed Jun 9 00:21:33 2021 +0300 [NO ISSUE][REP] Account for SSL socket data transfer behavior - user model changes: no - storage format changes: no - interface changes: no Details: - Account for the fact that a call to an SSLSocketChannel read operation can return 0 read bytes even in a blocking socket due to incomplete SSL packet. Change-Id: I0e1e69cba7336e0cfca5def870ab16334ce8c19f Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11064 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> (cherry picked from commit 94b1306e380dc923a964abf60900d55e545a4e4f) Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11843 --- .../replication/management/NetworkingUtil.java | 40 ++++++++++++++-------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java index d572ba2..7f6439c 100644 --- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java +++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java @@ -34,9 +34,13 @@ import java.util.Enumeration; import org.apache.hyracks.api.comm.NetworkAddress; import org.apache.hyracks.api.network.ISocketChannel; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class NetworkingUtil { + private static final Logger LOGGER = LogManager.getLogger(); + private NetworkingUtil() { throw new AssertionError("This util class should not be initialized."); } @@ -56,25 +60,33 @@ public class NetworkingUtil { public static void sendFile(FileChannel fileChannel, ISocketChannel socketChannel) throws IOException { long pos = 0; - long fileSize = fileChannel.size(); - long remainingBytes = fileSize; - long transferredBytes = 0; - - while ((transferredBytes += fileChannel.transferTo(pos, remainingBytes, socketChannel)) < fileSize) { - pos += transferredBytes; - remainingBytes -= transferredBytes; + long remainingBytes = fileChannel.size(); + try { + while (remainingBytes > 0) { + long sentBytes = fileChannel.transferTo(pos, remainingBytes, socketChannel); + pos += sentBytes; + remainingBytes -= sentBytes; + } + socketChannel.getSocketChannel().socket().getOutputStream().flush(); + } catch (Exception e) { + LOGGER.info("failed to send file; file size {}, pos {}, remainingBytes {}", fileChannel.size(), pos, + remainingBytes); } - socketChannel.getSocketChannel().socket().getOutputStream().flush(); } public static void downloadFile(FileChannel fileChannel, ISocketChannel socketChannel) throws IOException { + long remainingBytes = fileChannel.size(); long pos = 0; - long fileSize = fileChannel.size(); - long count = fileSize; - long numTransferred = 0; - while ((numTransferred += fileChannel.transferFrom(socketChannel, pos, count)) < fileSize) { - pos += numTransferred; - count -= numTransferred; + try { + while (remainingBytes > 0) { + long readBytes = fileChannel.transferFrom(socketChannel, pos, remainingBytes); + pos += readBytes; + remainingBytes -= readBytes; + } + } catch (Exception e) { + LOGGER.info("failed to download file; file size {}, pos {}, remainingBytes {}", fileChannel.size(), pos, + remainingBytes); + throw e; } }
