>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
