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 45a00540a1a35f464dba21923f2969872d412768
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Fri Aug 9 20:15:30 2024 +0300

    [NO ISSUE] Fail when next() indicates no more values
    
    Ext-ref: MB-63105
    Change-Id: I6a11f11c6a64fe60d29988d9fd16bd400d7f704f
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18635
    Integration-Tests: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Tested-by: Jenkins <[email protected]>
---
 .../lsm/merge/MergeColumnTupleWriter.java          | 26 ++++++++++++++-------
 .../RepeatedPrimitiveColumnValuesReader.java       | 27 +++++++++++-----------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
index 5912a3bf8c..6ff2cd9468 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
@@ -192,21 +192,23 @@ public class MergeColumnTupleWriter extends 
AbstractColumnTupleWriter {
             columnReader.write(columnWriter, count);
         } catch (ColumnarValueException e) {
             ObjectNode node = e.createNode(getClass().getSimpleName());
-            node.put("numberOfWrittenPrimaryKeys", 
primaryKeyWriters[0].getCount());
-            node.put("writtenComponents", writtenComponents.toString());
+            appendExceptionCommonInfo(node, componentIndex, count);
             node.put("blockIndex", blockIndex);
-            node.put("componentIndex", componentIndex);
-            node.put("count", count);
-            node.put("numberOFAntiMatters", numberOfAntiMatter);
             throw e;
         }
     }
 
     private void skipReaders(int componentIndex, int count) throws 
HyracksDataException {
         MergeColumnTupleReference componentTuple = 
componentsTuples[componentIndex];
-        for (int j = columnMetadata.getNumberOfPrimaryKeys(); j < 
columnMetadata.getNumberOfColumns(); j++) {
-            IColumnValuesReader columnReader = componentTuple.getReader(j);
-            columnReader.skip(count);
+        try {
+            for (int j = columnMetadata.getNumberOfPrimaryKeys(); j < 
columnMetadata.getNumberOfColumns(); j++) {
+                IColumnValuesReader columnReader = componentTuple.getReader(j);
+                columnReader.skip(count);
+            }
+        } catch (ColumnarValueException e) {
+            ObjectNode node = e.createNode(getClass().getSimpleName());
+            appendExceptionCommonInfo(node, componentIndex, count);
+            throw e;
         }
     }
 
@@ -241,4 +243,12 @@ public class MergeColumnTupleWriter extends 
AbstractColumnTupleWriter {
         }
         return Math.min(maxNumberOfTuples, numberOfTuplesUsingMaxSize);
     }
+
+    private void appendExceptionCommonInfo(ObjectNode node, int 
componentIndex, int count) {
+        node.put("numberOfWrittenPrimaryKeys", 
primaryKeyWriters[0].getCount());
+        node.put("writtenComponents", writtenComponents.toString());
+        node.put("numberOFAntiMatters", numberOfAntiMatter);
+        node.put("componentIndex", componentIndex);
+        node.put("count", count);
+    }
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/RepeatedPrimitiveColumnValuesReader.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/RepeatedPrimitiveColumnValuesReader.java
index 4f9fdec966..3f90a4baaa 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/RepeatedPrimitiveColumnValuesReader.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/RepeatedPrimitiveColumnValuesReader.java
@@ -18,7 +18,6 @@
  */
 package org.apache.asterix.column.values.reader;
 
-import java.io.IOException;
 import java.util.Arrays;
 
 import org.apache.asterix.column.values.IColumnValuesWriter;
@@ -96,23 +95,15 @@ public final class RepeatedPrimitiveColumnValuesReader 
extends AbstractColumnVal
     @Override
     public void write(IColumnValuesWriter writer, boolean callNext) throws 
HyracksDataException {
         //We always call next as repeated values cannot be primary keys
-        if (!next()) {
-            ColumnarValueException e = new ColumnarValueException();
-            appendReaderInformation(e.createNode(getClass().getSimpleName()));
-            throw e;
-        }
+        doNextAndCheck();
 
         if (isRepeatedValue()) {
             while (!isLastDelimiter()) {
                 writer.writeLevel(level);
                 if (isValue()) {
-                    try {
-                        writer.writeValue(this);
-                    } catch (IOException e) {
-                        throw HyracksDataException.create(e);
-                    }
+                    writer.writeValue(this);
                 }
-                next();
+                doNextAndCheck();
             }
         }
         //Add last delimiter, or NULL/MISSING
@@ -132,10 +123,10 @@ public final class RepeatedPrimitiveColumnValuesReader 
extends AbstractColumnVal
     @Override
     public void skip(int count) throws HyracksDataException {
         for (int i = 0; i < count; i++) {
-            next();
+            doNextAndCheck();
             if (isRepeatedValue()) {
                 while (!isLastDelimiter()) {
-                    next();
+                    doNextAndCheck();
                 }
             }
         }
@@ -162,4 +153,12 @@ public final class RepeatedPrimitiveColumnValuesReader 
extends AbstractColumnVal
         node.put("delimiterIndex", delimiterIndex);
         node.put("isDelimiter", isDelimiter());
     }
+
+    private void doNextAndCheck() throws HyracksDataException {
+        if (!next()) {
+            ColumnarValueException e = new ColumnarValueException();
+            appendReaderInformation(e.createNode(getClass().getSimpleName()));
+            throw e;
+        }
+    }
 }

Reply via email to