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