This is an automated email from the ASF dual-hosted git repository.

wyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 3748748c97 [ASTERIXDB-3421][STO] Fix column offset and length on read
3748748c97 is described below

commit 3748748c97b33df5096cf6173fe69ea4a9663e1c
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Mon Jun 10 11:58:12 2024 -0700

    [ASTERIXDB-3421][STO] Fix column offset and length on read
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Because we read the length of a column (4-bytes),
    the remaining number of bytes should account for
    those four bytes before reading the remaining pages
    
    Change-Id: I035311613d950bcc73332f82730464cc362b7728
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18360
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Wail Alkowaileet <[email protected]>
    Reviewed-by: Wail Alkowaileet <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
---
 .../column/cloud/buffercache/read/CloudColumnReadContext.java  | 10 +++++-----
 .../cloud/buffercache/read/CloudMegaPageReadContext.java       |  2 +-
 .../column/impls/lsm/tuples/ColumnMultiBufferProvider.java     |  8 ++++----
 3 files changed, 10 insertions(+), 10 deletions(-)

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 7623698ca2..fb3019fbbb 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
@@ -154,12 +154,12 @@ public final class CloudColumnReadContext implements 
IColumnReadContext {
         // TODO What if every other page is requested. That would do N/2 
request, where N is the number of pages.
         // TODO This should be optimized in a way that minimizes the number of 
requests
 
-        int[] columnsOrders = columnRanges.getColumnsOrder();
+        int[] columnsOrder = columnRanges.getColumnsOrder();
         int i = 0;
-        int columnIndex = columnsOrders[i];
+        int columnIndex = columnsOrder[i];
         while (columnIndex > -1) {
             if (columnIndex < columnRanges.getNumberOfPrimaryKeys()) {
-                columnIndex = columnsOrders[++i];
+                columnIndex = columnsOrder[++i];
                 continue;
             }
 
@@ -168,7 +168,7 @@ public final class CloudColumnReadContext implements 
IColumnReadContext {
             int lastPageIdx = firstPageIdx + 
columnRanges.getColumnNumberOfPages(columnIndex) - 1;
 
             // Advance to the next column to check if it has contiguous pages
-            columnIndex = columnsOrders[++i];
+            columnIndex = columnsOrder[++i];
             while (columnIndex > -1) {
                 int sharedPageCount = 0;
                 // Get the next column's start page ID
@@ -183,7 +183,7 @@ public final class CloudColumnReadContext implements 
IColumnReadContext {
 
                 lastPageIdx += 
columnRanges.getColumnNumberOfPages(columnIndex) - sharedPageCount;
                 // Advance to the next column
-                columnIndex = columnsOrders[++i];
+                columnIndex = columnsOrder[++i];
             }
 
             if (lastPageIdx >= columnRanges.getTotalNumberOfPages()) {
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/CloudMegaPageReadContext.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/CloudMegaPageReadContext.java
index 21d5ce7fd9..f28b2fd157 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/CloudMegaPageReadContext.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/CloudMegaPageReadContext.java
@@ -116,7 +116,7 @@ final class CloudMegaPageReadContext implements 
IBufferCacheReadContext {
              * - The operation is not a merge operation (the component will be 
deleted anyway)
              * - The disk has space
              *
-             * Note: 'emtpy' can be false while 'cloudOnly is true'. We cannot 
read from disk as the page can be
+             * Note: 'empty' can be false while 'cloudOnly is true'. We cannot 
read from disk as the page can be
              * evicted at any moment. In other words, the sweeper told us that 
it is going to evict this page; hence
              * 'cloudOnly' is true.
              */
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/ColumnMultiBufferProvider.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/ColumnMultiBufferProvider.java
index d7b076478a..2a2926f9a8 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/ColumnMultiBufferProvider.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/ColumnMultiBufferProvider.java
@@ -68,14 +68,14 @@ public final class ColumnMultiBufferProvider implements 
IColumnBufferProvider {
         ByteBuffer firstPage = readNext().duplicate();
         // Read the column's length
         length = ColumnUtil.readColumnLength(firstPage, startOffset, pageSize);
+        // +4-bytes after reading the length
+        startOffset += Integer.BYTES;
+        // -4-bytes after reading the length
+        length -= Integer.BYTES;
         // Get the remaining length of the column
         int remainingLength = length - firstPage.remaining();
         // Get the number of remaining pages this column occupies
         numberOfRemainingPages = getNumberOfRemainingPages(remainingLength, 
pageSize);
-        //+4-bytes after reading the length
-        startOffset += Integer.BYTES;
-        //-4-bytes after reading the length
-        length -= Integer.BYTES;
     }
 
     @Override

Reply via email to