You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by im...@apache.org on 2021/05/26 23:43:08 UTC

[asterixdb] 02/38: [NO ISSUE][REP] Account for SSL socket data transfer behavior

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 <mh...@apache.org>
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 <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Murtadha Hubail <mh...@apache.org>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
 .../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;
         }
     }