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]

Reply via email to