>From Wail Alkowaileet <[email protected]>:

Wail Alkowaileet has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17540 )

Change subject: [ASTERIXDB-3187][STO] Clear ByteBuffer position/limit of 
confiscated pages
......................................................................

[ASTERIXDB-3187][STO] Clear ByteBuffer position/limit of confiscated pages

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
Confiscated pages could have posititon/limit different
from 0/capacity(), respectively. This patch ensures
the ByteBuffers of confiscated pages  are cleared
before returned to LSM bulk loaders

Change-Id: I41081562479412096f812b330111a40e8e6c43a9
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17540
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
---
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java
M 
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
2 files changed, 49 insertions(+), 2 deletions(-)

Approvals:
  Murtadha Hubail: Looks good to me, approved
  Jenkins: Verified; Verified
  Anon. E. Moose #1000171:




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 f1fe86f..ea108cb 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
@@ -1139,7 +1139,9 @@
     }

     private ICachedPage confiscatePage(long dpid, int multiplier) throws 
HyracksDataException {
-        return getPageLoop(dpid, multiplier, true);
+        ICachedPage page = getPageLoop(dpid, multiplier, true);
+        page.getBuffer().clear();
+        return page;
     }

     private ICachedPage confiscateInner(long dpid, int multiplier) {
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java
index 593b00d..6ed4a09 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java
@@ -63,7 +63,7 @@
     private static final int NUM_PAGES = 10;
     private static final int MAX_OPEN_FILES = 20;
     private static final int HYRACKS_FRAME_SIZE = PAGE_SIZE;
-    private IHyracksTaskContext ctx = TestUtils.create(HYRACKS_FRAME_SIZE);
+    private final IHyracksTaskContext ctx = 
TestUtils.create(HYRACKS_FRAME_SIZE);

     private static final Random rnd = new Random(50);

@@ -443,6 +443,28 @@
         bufferCache.closeFile(fileId);
     }

+    @Test
+    public void testClearingConfiscatedPages() throws HyracksDataException {
+        TestStorageManagerComponentHolder.init(PAGE_SIZE, 1, MAX_OPEN_FILES);
+        IBufferCache bufferCache =
+                
TestStorageManagerComponentHolder.getBufferCache(ctx.getJobletContext().getServiceContext());
+        String fileName = getFileName();
+        IIOManager ioManager = 
TestStorageManagerComponentHolder.getIOManager();
+        FileReference file = ioManager.resolve(fileName);
+        int fileId = bufferCache.createFile(file);
+        int testPageId = 0;
+        bufferCache.openFile(fileId);
+        ICachedPage aPage = 
bufferCache.confiscatePage(BufferedFileHandle.getDiskPageId(fileId, 
testPageId));
+        Assert.assertEquals(PAGE_SIZE, aPage.getBuffer().limit());
+        Assert.assertEquals(0, aPage.getBuffer().position());
+        aPage.getBuffer().limit(5);
+        aPage.getBuffer().position(1);
+        bufferCache.returnPage(aPage);
+        aPage = 
bufferCache.confiscatePage(BufferedFileHandle.getDiskPageId(fileId, 
testPageId));
+        Assert.assertEquals(PAGE_SIZE, aPage.getBuffer().limit());
+        Assert.assertEquals(0, aPage.getBuffer().position());
+    }
+
     @AfterClass
     public static void cleanup() throws Exception {
         for (String s : openedFiles) {

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17540
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: stabilization-667a908755
Gerrit-Change-Id: I41081562479412096f812b330111a40e8e6c43a9
Gerrit-Change-Number: 17540
Gerrit-PatchSet: 4
Gerrit-Owner: Wail Alkowaileet <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Ian Maxon <[email protected]>
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Murtadha Hubail <[email protected]>
Gerrit-Reviewer: Wail Alkowaileet <[email protected]>
Gerrit-MessageType: merged

Reply via email to