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 acb36e62fccae5602f7e6fa343d42d37c419a626 Author: Ritik Raj <raj.ritik9...@gmail.com> AuthorDate: Tue Jul 15 16:30:14 2025 +0530 [ASTERIXDB-3601][STO] Remove unnecessary present column calculation for flush - user model changes: no - storage format changes: no - interface changes: no Details: 1. present column calculation not needed during flush. 2. added log line for counting pages flushed in dense or sparse format. Ext-ref: MB-66306 Change-Id: I70e3a7cddd1c744b651ff69cb0122b22ae60e0f1 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20106 Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Peeyush Gupta <peeyush.gu...@couchbase.com> Tested-by: Ritik Raj <ritik....@couchbase.com> --- .../lsm/flush/FlushColumnTupleWriter.java | 5 ++++ .../lsm/merge/MergeColumnTupleWriter.java | 5 ++++ .../zero/readers/DefaultColumnPageZeroReader.java | 6 ++-- .../zero/readers/SparseColumnPageZeroReader.java | 19 ++++++++----- .../DefaultColumnMultiPageZeroReader.java | 9 +++--- .../multipage/SparseColumnMultiPageZeroReader.java | 14 ++++++---- .../column/api/AbstractColumnTupleWriter.java | 8 ++++++ .../buffercache/read/CloudColumnReadContext.java | 32 ---------------------- .../column/impls/btree/ColumnBTreeBulkloader.java | 18 ++++++++++-- .../impls/btree/ColumnBTreeLeafFrameFactory.java | 4 ++- .../impls/btree/ColumnBTreeReadLeafFrame.java | 11 +++++--- .../column/impls/btree/IColumnPageZeroReader.java | 7 +++-- 12 files changed, 78 insertions(+), 60 deletions(-) diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java index bf76a6b42f..b33a2b4c00 100644 --- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java +++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java @@ -253,6 +253,11 @@ public class FlushColumnTupleWriter extends AbstractColumnTupleWriter { presentColumnsIndexes.clear(); } + @Override + public byte getWriterFlag() { + return pageZeroWriterFlavorSelector.getWriterFlag(); + } + public static int[] toIndexArray(BitSet bitSet) { int[] result = new int[bitSet.cardinality()]; int idx = 0; 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 fb5cfdb982..cce694da38 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 @@ -245,6 +245,11 @@ public class MergeColumnTupleWriter extends AbstractColumnTupleWriter { return FlushColumnTupleWriter.toIndexArray(bitSet); } + @Override + public byte getWriterFlag() { + return pageZeroWriterFlavorSelector.getWriterFlag(); + } + @Override public void close() { columnMetadata.close(); diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/DefaultColumnPageZeroReader.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/DefaultColumnPageZeroReader.java index a8d159f0e0..a60757eb4b 100644 --- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/DefaultColumnPageZeroReader.java +++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/DefaultColumnPageZeroReader.java @@ -32,6 +32,7 @@ import java.util.BitSet; import org.apache.asterix.column.zero.writers.DefaultColumnPageZeroWriter; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnBufferProvider; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.am.lsm.btree.column.cloud.IntPairUtil; import org.apache.hyracks.storage.am.lsm.btree.column.error.ColumnarValueException; import org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.IColumnPageZeroReader; @@ -52,13 +53,14 @@ public class DefaultColumnPageZeroReader implements IColumnPageZeroReader { } @Override - public void reset(ByteBuffer pageZeroBuf, int headerSize) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int headerSize) { this.pageZeroBuf = pageZeroBuf; this.numberOfPresentColumns = pageZeroBuf.getInt(NUMBER_OF_COLUMNS_OFFSET); this.headerSize = headerSize; } - public void reset(ByteBuffer pageZeroBuf, int numberOfPresentColumns, int headerSize) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int numberOfPresentColumns, + int headerSize) { this.pageZeroBuf = pageZeroBuf; this.numberOfPresentColumns = numberOfPresentColumns; this.headerSize = headerSize; diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/SparseColumnPageZeroReader.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/SparseColumnPageZeroReader.java index 3fd7a117dc..0360352bd5 100644 --- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/SparseColumnPageZeroReader.java +++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/readers/SparseColumnPageZeroReader.java @@ -23,6 +23,7 @@ import java.util.BitSet; import org.apache.asterix.column.zero.writers.DefaultColumnPageZeroWriter; import org.apache.asterix.column.zero.writers.SparseColumnPageZeroWriter; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.am.lsm.btree.column.cloud.IntPairUtil; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; @@ -38,18 +39,22 @@ public class SparseColumnPageZeroReader extends DefaultColumnPageZeroReader { } @Override - public void reset(ByteBuffer pageZeroBuf, int headerSize) { - super.reset(pageZeroBuf, headerSize); - setPresentColumnsIndices(); + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int headerSize) { + super.reset(pageZeroBuf, projectorType, headerSize); columnIndexToRelativeColumnIndex.clear(); - + if (projectorType == ColumnProjectorType.MERGE) { + setPresentColumnsIndices(); + } } @Override - public void reset(ByteBuffer pageZeroBuf, int numberOfPresentColumns, int headerSize) { - super.reset(pageZeroBuf, numberOfPresentColumns, headerSize); - setPresentColumnsIndices(); + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int numberOfPresentColumns, + int headerSize) { + super.reset(pageZeroBuf, projectorType, numberOfPresentColumns, headerSize); columnIndexToRelativeColumnIndex.clear(); + if (projectorType == ColumnProjectorType.MERGE) { + setPresentColumnsIndices(); + } } @Override diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/DefaultColumnMultiPageZeroReader.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/DefaultColumnMultiPageZeroReader.java index 8eaaed2b1a..88c1b445e4 100644 --- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/DefaultColumnMultiPageZeroReader.java +++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/DefaultColumnMultiPageZeroReader.java @@ -39,6 +39,7 @@ import org.apache.hyracks.data.std.primitive.IntegerPointable; import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.data.std.primitive.VoidPointable; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnBufferProvider; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.am.lsm.btree.column.cloud.IntPairUtil; import org.apache.hyracks.storage.am.lsm.btree.column.error.ColumnarValueException; @@ -72,17 +73,17 @@ public class DefaultColumnMultiPageZeroReader extends AbstractColumnMultiPageZer } @Override - public void reset(ByteBuffer pageZeroBuf) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType) { this.pageZeroBuf = pageZeroBuf; zerothSegmentMaxColumns = pageZeroBuf.getInt(MAX_COLUMNS_IN_ZEROTH_SEGMENT); - zerothSegmentReader.reset(pageZeroBuf, Math.min(zerothSegmentMaxColumns, getNumberOfPresentColumns()), - headerSize); + zerothSegmentReader.reset(pageZeroBuf, projectorType, + Math.min(zerothSegmentMaxColumns, getNumberOfPresentColumns()), headerSize); numberOfPageZeroSegments = pageZeroBuf.getInt(NUMBER_OF_PAGE_ZERO_SEGMENTS_OFFSET); numberOfColumns = pageZeroBuf.getInt(NUMBER_OF_COLUMNS_OFFSET); } @Override - public void reset(ByteBuffer pageZeroBuf, int headerSize) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int headerSize) { throw new UnsupportedOperationException("This method should not be called for multi-page readers."); } diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/SparseColumnMultiPageZeroReader.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/SparseColumnMultiPageZeroReader.java index 379d81c9d0..d0d620db72 100644 --- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/SparseColumnMultiPageZeroReader.java +++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/writers/multipage/SparseColumnMultiPageZeroReader.java @@ -39,6 +39,7 @@ import org.apache.hyracks.data.std.primitive.IntegerPointable; import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.data.std.primitive.VoidPointable; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnBufferProvider; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.am.lsm.btree.column.cloud.IntPairUtil; import org.apache.hyracks.storage.am.lsm.btree.column.error.ColumnarValueException; @@ -78,20 +79,23 @@ public class SparseColumnMultiPageZeroReader extends AbstractColumnMultiPageZero } @Override - public void reset(ByteBuffer pageZeroBuf) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType) { this.pageZeroBuf = pageZeroBuf; numberOfPageZeroSegments = pageZeroBuf.getInt(NUMBER_OF_PAGE_ZERO_SEGMENTS_OFFSET); numberOfColumnInZerothSegment = pageZeroBuf.getInt(MAX_COLUMNS_IN_ZEROTH_SEGMENT); maxColumnIndexInZerothSegment = pageZeroBuf.getInt(MAX_COLUMNS_INDEX_IN_ZEROTH_SEGMENT_OFFSET); headerSize = MAX_COLUMNS_INDEX_IN_ZEROTH_SEGMENT_OFFSET + numberOfPageZeroSegments * Integer.BYTES; - zerothSegmentReader.reset(pageZeroBuf, Math.min(numberOfColumnInZerothSegment, getNumberOfPresentColumns()), - headerSize); - setPresentColumnsIndices(); + zerothSegmentReader.reset(pageZeroBuf, projectorType, + Math.min(numberOfColumnInZerothSegment, getNumberOfPresentColumns()), headerSize); columnIndexToRelativeColumnIndex.clear(); + if (projectorType == ColumnProjectorType.MERGE) { + //This Info is only required for the merge operation, hence we can skip it for the projection operation. + setPresentColumnsIndices(); + } } @Override - public void reset(ByteBuffer pageZeroBuf, int headerSize) { + public void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int headerSize) { throw new UnsupportedOperationException("This method is not supported for multi-page zero readers."); } diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java index 8b3abd610d..60f7967cbd 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java @@ -107,9 +107,17 @@ public abstract class AbstractColumnTupleWriter extends AbstractTupleWriterDisab */ public abstract IColumnPageZeroWriterFlavorSelector getColumnPageZeroWriterFlavorSelector(); + /** + * Get writer flag for accounting sparse vs dense leafs. + * + * @return + */ + public abstract byte getWriterFlag(); + public void setWriterType(IColumnPageZeroWriter.ColumnPageZeroWriterType pageZeroWriterType) { if (pageZeroWriterType != IColumnPageZeroWriter.ColumnPageZeroWriterType.ADAPTIVE) { getColumnPageZeroWriterFlavorSelector().setPageZeroWriterFlag(pageZeroWriterType.getWriterFlag()); } } + } diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java index b499a50e09..bceec56c51 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java @@ -137,8 +137,6 @@ public final class CloudColumnReadContext implements IColumnReadContext { return; } - // pin the required page segments - // mergedPageRanges.clear(); int pageZeroId = leafFrame.getPageId(); // Pinning all the segments of the page zero // as the column eviction logic is based on the length of the columns which @@ -222,36 +220,6 @@ public final class CloudColumnReadContext implements IColumnReadContext { mergedPageRanges.pin(columnCtx, bufferCache, fileId, pageZeroId); } - private void mergePageZeroSegmentRanges(BitSet pageZeroSegmentRanges) { - // Since the 0th segment is already pinned, we can skip it - pageZeroSegmentRanges.clear(0); - if (pageZeroSegmentRanges.cardinality() == 0) { - // No page zero segments, nothing to merge - return; - } - - int start = -1; - int prev = -1; - - int current = pageZeroSegmentRanges.nextSetBit(0); - while (current >= 0) { - if (start == -1) { - // Start of a new range - start = current; - } else if (current != prev + 1) { - // Discontinuous: close the current range - mergedPageRanges.addRange(start, prev); - start = current; - } - - prev = current; - current = pageZeroSegmentRanges.nextSetBit(current + 1); - } - - // Close the final range - mergedPageRanges.addRange(start, prev); - } - @Override public void release(IBufferCache bufferCache) throws HyracksDataException { // Release might differ in the future if prefetching is supported diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java index 9ca57dd33c..244cf47601 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java @@ -69,6 +69,8 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I private int maxNumberOfPagesInALeafNode; private int maxTupleCount; private int lastRequiredFreeSpace; + private int sparseLeafsCount; + private int densePagesCount; public ColumnBTreeBulkloader(NCConfig storageConfig, float fillFactor, boolean verifyInput, IPageWriteCallback callback, ITreeIndex index, ITreeIndexFrame leafFrame, @@ -98,6 +100,8 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I numberOfLeafNodes = 1; maxTupleCount = 0; lastRequiredFreeSpace = 0; + sparseLeafsCount = 0; + densePagesCount = 0; } @Override @@ -161,6 +165,7 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I try { columnarFrame.flush(columnWriter, tupleCount, maxColumnsInPageZerothSegment, lowKey.getTuple(), splitKey.getTuple(), this); + updatePageLayoutStat(); } catch (Exception e) { logState(e); throw e; @@ -191,6 +196,7 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I try { columnarFrame.flush(columnWriter, tupleCount, maxColumnsInPageZerothSegment, lowKey.getTuple(), splitKey.getTuple(), this); + updatePageLayoutStat(); } catch (Exception e) { logState(e); throw e; @@ -240,6 +246,14 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I super.writeLastLeaf(page); } + private void updatePageLayoutStat() { + if (columnWriter.getWriterFlag() == IColumnPageZeroWriter.MULTI_PAGE_DEFAULT_WRITER_FLAG) { + densePagesCount++; + } else { + sparseLeafsCount++; + } + } + private void writeColumnAndSegmentPages() throws HyracksDataException { for (ICachedPage c : columnsPages) { write(c); @@ -315,9 +329,9 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I } LOGGER.debug( - "{} columnar bulkloader wrote maximum {} and last {} and used leafNodes: {}, tempPagesAllocated: {}, maxPagesPerColumn: {}, and maxLeafNodePages: {}", + "{} columnar bulkloader wrote maximum {} and last {} and used leafNodes: {}, tempPagesAllocated: {}, maxPagesPerColumn: {}, maxLeafNodePages: {}, denseLeafCount: {}, and sparseLeafCount: {}", status, maxTupleCount, tupleCount, numberOfLeafNodes, numberOfTempConfiscatedPages, - maxNumberOfPagesForAColumn, maxNumberOfPagesInALeafNode); + maxNumberOfPagesForAColumn, maxNumberOfPagesInALeafNode, densePagesCount, sparseLeafsCount); } /* diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeLeafFrameFactory.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeLeafFrameFactory.java index 93e68b0e4a..824ec8acf3 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeLeafFrameFactory.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeLeafFrameFactory.java @@ -27,6 +27,7 @@ import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleRea import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleReaderWriterFactory; import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleWriter; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnMetadata; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.IColumnProjectionInfo; import org.apache.hyracks.storage.am.lsm.btree.column.cloud.buffercache.IColumnWriteContext; @@ -63,6 +64,7 @@ public class ColumnBTreeLeafFrameFactory implements ITreeIndexFrameFactory { public ColumnBTreeReadLeafFrame createReadFrame(IColumnProjectionInfo columnProjectionInfo) { ITreeIndexTupleWriter rowTupleWriter = rowTupleWriterFactory.createTupleWriter(); AbstractColumnTupleReader columnTupleReader = columnTupleWriterFactory.createColumnReader(columnProjectionInfo); - return new ColumnBTreeReadLeafFrame(rowTupleWriter, columnTupleReader); + ColumnProjectorType projectorType = columnProjectionInfo.getProjectorType(); + return new ColumnBTreeReadLeafFrame(rowTupleWriter, columnTupleReader, projectorType); } } diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeReadLeafFrame.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeReadLeafFrame.java index 33074238fb..bfd26d0be4 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeReadLeafFrame.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeReadLeafFrame.java @@ -28,6 +28,7 @@ import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter; import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleReader; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnReadMultiPageOp; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnTupleIterator; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; import org.apache.hyracks.storage.common.buffercache.CachedPage; import org.apache.hyracks.storage.common.buffercache.IBufferCache; import org.apache.hyracks.storage.common.buffercache.ICachedPage; @@ -38,12 +39,14 @@ public final class ColumnBTreeReadLeafFrame extends AbstractColumnBTreeLeafFrame private final AbstractColumnTupleReader columnarTupleReader; private final ITreeIndexTupleReference leftMostTuple; private final ITreeIndexTupleReference rightMostTuple; + private final ColumnProjectorType projectorType; private IColumnPageZeroReader columnPageZeroReader; - public ColumnBTreeReadLeafFrame(ITreeIndexTupleWriter rowTupleWriter, - AbstractColumnTupleReader columnarTupleReader) { + public ColumnBTreeReadLeafFrame(ITreeIndexTupleWriter rowTupleWriter, AbstractColumnTupleReader columnarTupleReader, + ColumnProjectorType projectorType) { super(rowTupleWriter, columnarTupleReader.getPageZeroWriterFlavorSelector()); this.columnarTupleReader = columnarTupleReader; + this.projectorType = projectorType; leftMostTuple = rowTupleWriter.createTupleReference(); rightMostTuple = rowTupleWriter.createTupleReference(); } @@ -51,7 +54,7 @@ public final class ColumnBTreeReadLeafFrame extends AbstractColumnBTreeLeafFrame @Override protected void resetPageZeroReader() { columnPageZeroReader = pageZeroWriterFlavorSelector.createPageZeroReader(getFlagByte(), buf.capacity()); - columnPageZeroReader.reset(buf); + columnPageZeroReader.reset(buf, projectorType); buf.position(columnPageZeroReader.getHeaderSize()); } @@ -170,7 +173,7 @@ public final class ColumnBTreeReadLeafFrame extends AbstractColumnBTreeLeafFrame } public ColumnBTreeReadLeafFrame createCopy() { - return new ColumnBTreeReadLeafFrame(rowTupleWriter, columnarTupleReader); + return new ColumnBTreeReadLeafFrame(rowTupleWriter, columnarTupleReader, projectorType); } @Override diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroReader.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroReader.java index f57eba3916..3f837a1d71 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroReader.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroReader.java @@ -23,14 +23,15 @@ import java.util.BitSet; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnBufferProvider; +import org.apache.hyracks.storage.am.lsm.btree.column.api.projection.ColumnProjectorType; public interface IColumnPageZeroReader { - default void reset(ByteBuffer pageZeroBuf) { - reset(pageZeroBuf, AbstractColumnBTreeLeafFrame.HEADER_SIZE); + default void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType) { + reset(pageZeroBuf, projectorType, AbstractColumnBTreeLeafFrame.HEADER_SIZE); } - void reset(ByteBuffer pageZeroBuf, int headerSize); + void reset(ByteBuffer pageZeroBuf, ColumnProjectorType projectorType, int headerSize); int getColumnOffset(int columnIndex) throws HyracksDataException;