This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 94b1306e380dc923a964abf60900d55e545a4e4f Author: Murtadha Hubail <[email protected]> AuthorDate: Thu Apr 15 02:53:08 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]> --- .../replication/management/NetworkingUtil.java | 34 ++++++++++++---------- 1 file changed, 18 insertions(+), 16 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 97dd049..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 @@ -60,30 +60,32 @@ 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; try { - while ((numTransferred += fileChannel.transferFrom(socketChannel, pos, count)) < fileSize) { - pos += numTransferred; - count -= numTransferred; + 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 {}, count {}, numTransferred {}", fileSize, pos, - count, numTransferred); + LOGGER.info("failed to download file; file size {}, pos {}, remainingBytes {}", fileChannel.size(), pos, + remainingBytes); throw e; } }
