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 c4b27ad5e5 [ASTERIXDB-3416][STO] Fix BC lock leaks on read failure
c4b27ad5e5 is described below

commit c4b27ad5e56c3efdf1b5a801d29f4e4f9a963ecf
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Mon Jun 3 10:33:40 2024 -0700

    [ASTERIXDB-3416][STO] Fix BC lock leaks on read failure
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Read locks could be held indefinitely on page read failure
    
    Change-Id: I8708d2681370252f2a45f409be1a571515c2026f
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18337
    Integration-Tests: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Tested-by: Jenkins <[email protected]>
---
 .../column/cloud/buffercache/read/CloudColumnReadContext.java | 11 +++++++----
 .../cloud/buffercache/read/DefaultColumnReadContext.java      |  3 ++-
 .../hyracks/storage/common/buffercache/BufferCache.java       |  2 +-
 3 files changed, 10 insertions(+), 6 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 af69fe5f8d..2d6b2fdf00 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
@@ -112,10 +112,13 @@ public final class CloudColumnReadContext implements 
IColumnReadContext {
     @Override
     public ICachedPage pinNext(ColumnBTreeReadLeafFrame leafFrame, 
IBufferCache bufferCache, int fileId)
             throws HyracksDataException {
-        // TODO do we support prefetching?
-        ICachedPage nextPage = 
bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, 
leafFrame.getNextLeaf()), this);
+        int nextLeaf = leafFrame.getNextLeaf();
+        // Release the previous pages (including page0)
         release(bufferCache);
         bufferCache.unpin(leafFrame.getPage(), this);
+
+        // pin the next page0
+        ICachedPage nextPage = 
bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, nextLeaf), this);
         leafFrame.setPage(nextPage);
         return nextPage;
     }
@@ -127,8 +130,8 @@ public final class CloudColumnReadContext implements 
IColumnReadContext {
             return;
         }
 
-        // TODO handle prefetch if supported
-
+        // 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
         columnRanges.reset(leafFrame, projectedColumns, plan, 
cloudOnlyColumns);
         int pageZeroId = leafFrame.getPageId();
         int[] columnsOrders = columnRanges.getColumnsOrder();
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/DefaultColumnReadContext.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/DefaultColumnReadContext.java
index 591df4aeaa..0e6f858248 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/DefaultColumnReadContext.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/DefaultColumnReadContext.java
@@ -67,8 +67,9 @@ public final class DefaultColumnReadContext implements 
IColumnReadContext {
     @Override
     public ICachedPage pinNext(ColumnBTreeReadLeafFrame leafFrame, 
IBufferCache bufferCache, int fileId)
             throws HyracksDataException {
-        ICachedPage nextPage = 
bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, 
leafFrame.getNextLeaf()));
+        int nextLeaf = leafFrame.getNextLeaf();
         bufferCache.unpin(leafFrame.getPage());
+        ICachedPage nextPage = 
bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, nextLeaf));
         leafFrame.setPage(nextPage);
         return nextPage;
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index 53e27a987e..ab375320dd 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -219,7 +219,7 @@ public class BufferCache implements IBufferCacheInternal, 
ILifeCycleComponent, I
                         throw e;
                     } finally {
                         if (!cPage.valid) {
-                            unpin(cPage);
+                            unpin(cPage, context);
                         }
                     }
                 }

Reply via email to