[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 <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Wail Alkowaileet <wael.y.k@gmail.com>
Reviewed-by: Wail Alkowaileet <wael.y.k@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
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 7623698..fb3019f 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 @@
// 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 @@
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 @@
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 21d5ce7..f28b2fd 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 @@
* - 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 d7b0764..2a2926f 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 @@
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