[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;
+ }
+ }
}