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;

Reply via email to