This is an automated email from the ASF dual-hosted git repository. leerho pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/datasketches-memory17.git
commit f14744aacfbb528eb4e18ef2fb8f0a2e77a89bd3 Author: Lee Rhodes <[email protected]> AuthorDate: Wed May 25 18:05:54 2022 -0700 Interim 1 --- .../org/apache/datasketches/memory/BaseState.java | 3 +- .../memory/internal/BaseStateImpl.java | 1 + .../memory/internal/BaseWritableMemoryImpl.java | 2 +- .../memory/test/AllocateDirectMapMemoryTest.java | 33 ++++++++------- .../memory/test/AllocateDirectMemoryTest.java | 48 ++++++++++++---------- 5 files changed, 46 insertions(+), 41 deletions(-) diff --git a/src/main/java/org/apache/datasketches/memory/BaseState.java b/src/main/java/org/apache/datasketches/memory/BaseState.java index 315672b..e54f4dd 100644 --- a/src/main/java/org/apache/datasketches/memory/BaseState.java +++ b/src/main/java/org/apache/datasketches/memory/BaseState.java @@ -31,7 +31,7 @@ import jdk.incubator.foreign.ResourceScope; * * @author Lee Rhodes */ -public interface BaseState extends AutoCloseable { +public interface BaseState /* extends AutoCloseable */ { /** * The java line separator character as a String. @@ -47,7 +47,6 @@ public interface BaseState extends AutoCloseable { * For off-heap segments, this closes the controlling ResourceScope. If the segment is * not off-heap, this does nothing. */ - @Override void close(); /** diff --git a/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java b/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java index 701523f..c8e9a00 100644 --- a/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java +++ b/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java @@ -103,6 +103,7 @@ public abstract class BaseStateImpl implements BaseState { @Override public ResourceScope scope() { return seg.scope(); } + @SuppressWarnings("resource") @Override public boolean isAlive() { return seg.scope().isAlive(); } diff --git a/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java index 69cbaed..7953d7c 100644 --- a/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java +++ b/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java @@ -114,7 +114,7 @@ public abstract class BaseWritableMemoryImpl extends BaseStateImpl implements Wr * @return this class constructed via the leaf node. * @throws Exception */ - //@SuppressWarnings("resource") + @SuppressWarnings("resource") public static WritableMemory wrapMap(final File file, final long fileOffsetBytes, final long capacityBytes, final boolean localReadOnly, final ByteOrder byteOrder) throws Exception { diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java index 5af098d..54d6b9f 100644 --- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java @@ -40,30 +40,28 @@ import jdk.incubator.foreign.ResourceScope; public class AllocateDirectMapMemoryTest { private static final String LS = System.getProperty("line.separator"); -// @BeforeClass -// public void setReadOnly() { -// UtilTest.setGettysburgAddressFileToReadOnly(); -// } - @Test public void simpleMap() throws Exception { File file = getResourceFile("GettysburgAddress.txt"); file.setReadOnly(); - try (Memory mem = Memory.map(file)) { - mem.close(); + Memory mem = null; + try (ResourceScope scope = (mem = Memory.map(file)).scope()) { } + assertFalse(mem.isAlive()); } @Test public void testIllegalArguments() throws Exception { File file = getResourceFile("GettysburgAddress.txt"); - try (Memory mem = Memory.map(file, -1, Integer.MAX_VALUE, ByteOrder.nativeOrder())) { + Memory mem = null; + try (ResourceScope scope = (mem = Memory.map(file, -1, Integer.MAX_VALUE, ByteOrder.nativeOrder())).scope()) { fail("Failed: testIllegalArgumentException: Position was negative."); + mem.getCapacity(); } catch (IllegalArgumentException e) { //ok } - try (Memory mem = Memory.map(file, 0, -1, ByteOrder.nativeOrder())) { + try (ResourceScope scope = (mem = Memory.map(file, 0, -1, ByteOrder.nativeOrder())).scope()) { fail("Failed: testIllegalArgumentException: Size was negative."); } catch (IllegalArgumentException e) { //ok @@ -74,25 +72,26 @@ public class AllocateDirectMapMemoryTest { public void testMapAndMultipleClose() throws Exception { File file = getResourceFile("GettysburgAddress.txt"); long memCapacity = file.length(); - try (Memory mem = Memory.map(file, 0, memCapacity, ByteOrder.nativeOrder())) { + Memory mem = null; + try (ResourceScope scope = (mem = Memory.map(file, 0, memCapacity, ByteOrder.nativeOrder())).scope()) { assertEquals(memCapacity, mem.getCapacity()); - mem.close(); - mem.close(); //multiple closes are ok - mem.getByte(0); //throws - } catch (IllegalStateException e) { - //ok + //mem.close(); //close inside the TWR block with throw excption + // when the TWR block ends } + mem.close(); //multiple closes outside the TWR block are OK + mem.close(); // but unnecessary } @Test public void testLoad() throws Exception { File file = getResourceFile("GettysburgAddress.txt"); long memCapacity = file.length(); - try (Memory mem = Memory.map(file, 0, memCapacity, ByteOrder.nativeOrder())) { + Memory mem = null; + try (ResourceScope scope = (mem = Memory.map(file, 0, memCapacity, ByteOrder.nativeOrder())).scope()) { mem.load(); assertTrue(mem.isLoaded()); - mem.close(); } + mem.close(); //OK } @SuppressWarnings("resource") diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java index 2f3a562..e28bbd4 100644 --- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java @@ -36,72 +36,78 @@ public class AllocateDirectMemoryTest { @SuppressWarnings("resource") @Test - public void simpleAllocateDirect() throws Exception { + public void simpleAllocateDirect() { int longs = 32; - WritableMemory wMem2 = null; - try (WritableMemory wMem = WritableMemory.allocateDirect(longs << 3, memReqSvr)) { + WritableMemory wMem = null; + try (ResourceScope scope = (wMem = WritableMemory.allocateDirect(longs << 3, memReqSvr)).scope()) { for (int i = 0; i<longs; i++) { wMem.putLong(i << 3, i); assertEquals(wMem.getLong(i << 3), i); } //inside the TWR block the memory scope should be alive assertTrue(wMem.isAlive()); - wMem2 = wMem; } //The TWR block has exited, so the memory should be invalid - assertFalse(wMem2.isAlive()); - wMem2.close(); + assertFalse(wMem.isAlive()); + wMem.close(); } @Test - public void checkMemoryRequestServer() throws Exception { + public void checkMemoryRequestServer() { int longs1 = 32; int bytes1 = longs1 << 3; - try (WritableMemory origWmem = WritableMemory.allocateDirect(bytes1, memReqSvr)) { + WritableMemory wmem = null; + try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes1, memReqSvr)).scope()) { for (int i = 0; i < longs1; i++) { //puts data in origWmem - origWmem.putLong(i << 3, i); - assertEquals(origWmem.getLong(i << 3), i); + wmem.putLong(i << 3, i); + assertEquals(wmem.getLong(i << 3), i); } - println(origWmem.toHexString("Test", 0, 32 * 8)); + println(wmem.toHexString("Test", 0, 32 * 8)); int longs2 = 64; int bytes2 = longs2 << 3; - MemoryRequestServer memReqSvr = origWmem.getMemoryRequestServer(); + MemoryRequestServer memReqSvr = wmem.getMemoryRequestServer(); if (memReqSvr == null) { memReqSvr = new DefaultMemoryRequestServer(); } - WritableMemory newWmem = memReqSvr.request(origWmem, bytes2); + WritableMemory newWmem = memReqSvr.request(wmem, bytes2); assertFalse(newWmem.isDirect()); //on heap by default for (int i = 0; i < longs2; i++) { newWmem.putLong(i << 3, i); assertEquals(newWmem.getLong(i << 3), i); } - memReqSvr.requestClose(origWmem, newWmem); + memReqSvr.requestClose(wmem, newWmem); //The default MRS doesn't actually release because it could be easily misused. } // So we let the TWR release it here } + @SuppressWarnings("resource") @Test - public void checkNonNativeDirect() throws Exception { - try (WritableMemory wmem = + public void checkNonNativeDirect() { + WritableMemory wmem = null; + try (ResourceScope scope = (wmem = WritableMemory.allocateDirect( 128, 8, ResourceScope.newConfinedScope(), BaseState.NON_NATIVE_BYTE_ORDER, - memReqSvr)) { + memReqSvr)).scope()) { wmem.putChar(0, (char) 1); assertEquals(wmem.getByte(1), (byte) 1); } } @Test - public void checkExplicitClose() throws Exception { + public void checkExplicitCloseNoTWR() { final long cap = 128; - try (WritableMemory wmem = WritableMemory.allocateDirect(cap, memReqSvr)) { - wmem.close(); //explicit close. Does the work of closing - } //end of scope + WritableMemory wmem = null; + try { + wmem = WritableMemory.allocateDirect(cap, memReqSvr); + wmem.close(); //explicit close + } catch (final Exception e) { + throw e; + } } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
