[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 <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
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 5912a3b..6ff2cd9 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 @@
             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 @@
         }
         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 4f9fdec..3f90a4b 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 @@
     @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 @@
     @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 @@
         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;
+        }
+    }
 }