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 67bbe28bf359fbc8bc7c946ad92a396a8e190cc7 Author: Peeyush Gupta <[email protected]> AuthorDate: Tue Oct 1 17:43:41 2024 -0700 [ASTERIXDB-3504][STO] Error in calculating if Page 0 is full for Column Datasets - user model changes: no - storage format changes: no - interface changes: no Details: While checking if page 0 is full we were considering the split key from the previous tuple and not the current tuple. In case the split key from the current tuple is considerably larger, we might mark the page as not full even when adding the current tuple to the page will overflow it. Ext-ref: MB-63590 Change-Id: I5c53e573e8d2333161601a82af16f00120122579 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18925 Reviewed-by: Wail Alkowaileet <[email protected]> Tested-by: Jenkins <[email protected]> --- .../am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 1b1fad04f7..d9aec0c63b 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 @@ -112,7 +112,7 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I //Occupied space from previous writes requiredFreeSpace += columnWriter.getOccupiedSpace(); //min and max tuples' sizes - requiredFreeSpace += lowKey.getTuple().getTupleSize() + splitKey.getTuple().getTupleSize(); + requiredFreeSpace += lowKey.getTuple().getTupleSize() + getSplitKeySize(tuple); //New tuple required space requiredFreeSpace += columnWriter.bytesRequired(tuple); return bufferCache.getPageSize() <= requiredFreeSpace; @@ -232,12 +232,16 @@ public final class ColumnBTreeBulkloader extends BTreeNSMBulkLoader implements I } private void setSplitKey(ISplitKey splitKey, ITupleReference tuple) { - int splitKeySize = tupleWriter.bytesRequired(tuple, 0, cmp.getKeyFieldCount()); + int splitKeySize = getSplitKeySize(tuple); splitKey.initData(splitKeySize); tupleWriter.writeTupleFields(tuple, 0, cmp.getKeyFieldCount(), splitKey.getBuffer().array(), 0); splitKey.getTuple().resetByTupleOffset(splitKey.getBuffer().array(), 0); } + private int getSplitKeySize(ITupleReference tuple) { + return tupleWriter.bytesRequired(tuple, 0, cmp.getKeyFieldCount()); + } + private void log(String status, int numberOfTempConfiscatedPages) { if (!LOGGER.isDebugEnabled()) { return;
