You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2020/05/14 00:06:24 UTC

[asterixdb] 16/20: [ASTERIXDB-2712][EXT] Fix ByteBuffer limit when read more data

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 efef0919bb1a6cefbce2869ca9ce53fc04cdf77d
Author: Wail Alkowaileet <wa...@gmail.com>
AuthorDate: Thu Apr 16 13:06:01 2020 -0700

    [ASTERIXDB-2712][EXT] Fix ByteBuffer limit when read more data
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - When reading more data, ensure the limit is
      set to capacity.
    - Log RuntimeExceptions in SocketServerInputStream
    
    Change-Id: I7ed572ce90c64b145abef6eb0e4dc0e788f2667e
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/5724
    Reviewed-by: Ian Maxon <im...@uci.edu>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
---
 .../asterix/external/input/stream/AsterixInputStreamReader.java      | 4 +++-
 .../asterix/external/input/stream/SocketServerInputStream.java       | 5 +++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
index 8e166c0..d35ad26 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
@@ -68,7 +68,7 @@ public class AsterixInputStreamReader extends Reader {
     }
 
     @Override
-    public int read(char cbuf[], int offset, int length) throws IOException {
+    public int read(char[] cbuf, int offset, int length) throws IOException {
         if (done) {
             return -1;
         }
@@ -84,7 +84,9 @@ public class AsterixInputStreamReader extends Reader {
                 } else {
                     // need to read more data
                     System.arraycopy(bytes, byteBuffer.position(), bytes, 0, byteBuffer.remaining());
+                    len = 0; // reset to read more bytes
                     byteBuffer.position(byteBuffer.remaining());
+                    byteBuffer.limit(byteBuffer.capacity()); //set limit to capacity for the new bytes
                     while (len == 0) {
                         len = in.read(bytes, byteBuffer.position(), bytes.length - byteBuffer.position());
                     }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/SocketServerInputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/SocketServerInputStream.java
index fb9a4a6..0fe81cd 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/SocketServerInputStream.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/SocketServerInputStream.java
@@ -137,6 +137,11 @@ public class SocketServerInputStream extends AsterixInputStream {
 
     @Override
     public boolean handleException(Throwable th) {
+        if (th instanceof RuntimeException) {
+            //Log runtime exception
+            //TODO Should we continue anyway?
+            LOGGER.error("Encountered an unexpected error", th);
+        }
         try {
             return accept();
         } catch (IOException e) {