You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2021/08/08 23:18:30 UTC

[datasketches-memory] 01/01: This is to fix DS-Java issue 358, which relates to Druid Issue 11544.

This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch DS-javaIssue358
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 310a8b7a3fafc99f12cae01125cac675ed4cf196
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Sun Aug 8 16:18:03 2021 -0700

    This is to fix DS-Java issue 358, which relates to Druid Issue 11544.
---
 .../datasketches/memory/test/LeafImplTest.java     |  4 ++--
 .../memory/test/WritableMemoryTest.java            |  2 +-
 .../org/apache/datasketches/memory/BaseState.java  |  1 +
 .../apache/datasketches/memory/WritableBuffer.java | 18 +++++++++------
 .../apache/datasketches/memory/WritableMemory.java | 27 +++++++++++-----------
 .../internal/BBNonNativeWritableBufferImpl.java    |  9 ++++++++
 .../internal/BBNonNativeWritableMemoryImpl.java    | 17 +++++++++++---
 .../memory/internal/BBWritableBufferImpl.java      |  9 ++++++++
 .../memory/internal/BBWritableMemoryImpl.java      | 17 +++++++++++---
 .../memory/internal/BaseStateImpl.java             |  3 +--
 .../memory/internal/BaseWritableMemoryImpl.java    |  7 +++---
 .../datasketches/memory/internal/BufferImpl.java   |  4 ++--
 .../DirectNonNativeWritableBufferImpl.java         |  7 ------
 .../DirectNonNativeWritableMemoryImpl.java         |  7 ------
 .../memory/internal/DirectWritableBufferImpl.java  |  6 -----
 .../internal/HeapNonNativeWritableBufferImpl.java  |  7 ++++++
 .../internal/HeapNonNativeWritableMemoryImpl.java  |  9 +++++++-
 .../memory/internal/HeapWritableBufferImpl.java    |  7 ++++++
 .../memory/internal/HeapWritableMemoryImpl.java    |  7 ++++++
 .../internal/MapNonNativeWritableBufferImpl.java   | 14 +++++------
 .../internal/MapNonNativeWritableMemoryImpl.java   | 14 +++++------
 .../memory/internal/MapWritableBufferImpl.java     | 14 +++++------
 .../memory/internal/MapWritableMemoryImpl.java     | 14 +++++------
 .../datasketches/memory/internal/MemoryImpl.java   |  4 ++--
 .../memory/internal/WritableBufferImpl.java        | 13 ++++-------
 .../memory/internal/WritableMemoryImpl.java        | 14 ++++-------
 26 files changed, 148 insertions(+), 107 deletions(-)

diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
index 9e20691..ac59599 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
@@ -227,7 +227,7 @@ public class LeafImplTest {
 
     assertTrue(mem.getByteBuffer() != null);
     assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
-    assertTrue(mem.getMemoryRequestServer() == null);
+    assertNotNull(mem.getMemoryRequestServer());
     Object obj = ReflectUtil.getUnsafeObject(mem);
     //Object obj = mem.getUnsafeObject();
     if (direct) {
@@ -269,7 +269,7 @@ public class LeafImplTest {
 
     assertTrue(nnMem.getByteBuffer() != null);
     assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
-    assertTrue(nnMem.getMemoryRequestServer() == null);
+    assertNotNull(nnMem.getMemoryRequestServer());
     obj = ReflectUtil.getUnsafeObject(nnMem);
     //obj = nnMem.getUnsafeObject();
     if (direct) {
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
index ea49e69..f9cbd78 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
@@ -47,7 +47,7 @@ public class WritableMemoryTest {
   public void wrapBigEndianAsLittle() {
     ByteBuffer bb = ByteBuffer.allocate(64);
     bb.putChar(0, (char)1); //as BE
-    WritableMemory wmem = WritableMemory.writableWrap(bb, ByteOrder.LITTLE_ENDIAN);
+    WritableMemory wmem = WritableMemory.writableWrap(bb, ByteOrder.LITTLE_ENDIAN, null);
     assertEquals(wmem.getChar(0), 256);
   }
 
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
index 259f571..c3728dd 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
@@ -32,6 +32,7 @@ import org.apache.datasketches.memory.internal.BaseStateImpl;
  * @author Lee Rhodes
  */
 public interface BaseState {
+  static final MemoryRequestServer defaultMemReqSvr = new DefaultMemoryRequestServer();
 
   //Byte Order Related
   
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
index bfb3834..1b77930 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
@@ -37,7 +37,7 @@ public interface WritableBuffer extends Buffer {
    * @return a new WritableBuffer for write operations on the given ByteBuffer.
    */
   static WritableBuffer writableWrap(ByteBuffer byteBuf) {
-    return WritableBufferImpl.writableWrap(byteBuf, byteBuf.order());
+    return WritableBufferImpl.writableWrap(byteBuf);
   }
 
   /**
@@ -48,10 +48,13 @@ public interface WritableBuffer extends Buffer {
    * @param byteBuf the given ByteBuffer, must not be null
    * @param byteOrder the byte order to be used, which may be independent of the byte order
    * state of the given ByteBuffer
+   * @param memReqSvr A user-specified MemoryRequestServer.
+   * This is a callback mechanism for a user client to request a larger Memory.
    * @return a new WritableBuffer for write operations on the given ByteBuffer.
    */
-  static WritableBuffer writableWrap(ByteBuffer byteBuf, ByteOrder byteOrder) {
-    return WritableBufferImpl.writableWrap(byteBuf, byteOrder);
+  static WritableBuffer writableWrap(ByteBuffer byteBuf, ByteOrder byteOrder, MemoryRequestServer memReqSvr) {
+    MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
+    return WritableBufferImpl.writableWrap(byteBuf, byteOrder, mReqSvr);
   }  
   
   //DUPLICATES
@@ -363,10 +366,11 @@ public interface WritableBuffer extends Buffer {
 
   //OTHER WRITABLE API METHODS
   /**
-   * For Direct Memory only. Other types of backing resources will return null.
-   * Gets the MemoryRequestServer object used by dynamic off-heap (Direct) memory objects
-   * to request additional memory.
-   * Set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
+   * For ByteBuffer and Direct Memory backed resources only. Heap and Map backed resources will return null.
+   * Gets the MemoryRequestServer object used by dynamic Memory-backed objects
+   * to request additional memory.  To customize the actions of the MemoryRequestServer, 
+   * extend the MemoryRequestServer interfact and 
+   * set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
    * If not explicity set, this returns the {@link DefaultMemoryRequestServer}.
    * @return the MemoryRequestServer object (if direct memory) or null.
    */
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
index 5665964..29dd9c9 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
@@ -34,14 +34,11 @@ public interface WritableMemory extends Memory {
    * the same byte order, as the given ByteBuffer, unless the capacity of the given ByteBuffer is
    * zero, then byte order of the returned WritableMemory object, as well as backing storage and
    * read-only status are unspecified.
-   *
-   * <p><b>Note:</b> Always qualify this method with the class name, e.g.,
-   * <i>WritableMemory.wrap(...)</i>.
    * @param byteBuf the given ByteBuffer
    * @return a new WritableMemory for write operations on the given ByteBuffer.
    */
   static WritableMemory writableWrap(ByteBuffer byteBuf) {
-    return WritableMemoryImpl.writableWrap(byteBuf, byteBuf.order());
+    return WritableMemoryImpl.writableWrap(byteBuf);
   }
   
   /**
@@ -49,16 +46,16 @@ public interface WritableMemory extends Memory {
    * the given byte order, ignoring the byte order of the given ByteBuffer. If the capacity of
    * the given ByteBuffer is zero the byte order of the returned WritableMemory object
    * (as well as backing storage) is unspecified.
-   *
-   * <p><b>Note:</b> Always qualify this method with the class name, e.g.,
-   * <i>WritableMemory.wrap(...)</i>.
    * @param byteBuf the given ByteBuffer, must not be null
    * @param byteOrder the byte order to be used, which may be independent of the byte order
    * state of the given ByteBuffer
+   * @param memReqSvr A user-specified MemoryRequestServer. If null, the DefaultMemoryRequestServer is used.
+   * This is a callback mechanism for a user client to request a larger Memory.
    * @return a new WritableMemory for write operations on the given ByteBuffer.
    */
-  static WritableMemory writableWrap(ByteBuffer byteBuf, ByteOrder byteOrder) {
-    return WritableMemoryImpl.writableWrap(byteBuf, byteOrder);
+  static WritableMemory writableWrap(ByteBuffer byteBuf, ByteOrder byteOrder, MemoryRequestServer memReqSvr) {
+    MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
+    return WritableMemoryImpl.writableWrap(byteBuf, byteOrder, mReqSvr);
   }
   
   //MAP
@@ -134,7 +131,8 @@ public interface WritableMemory extends Memory {
    * Please read Javadocs for {@link Handle}.
    */
   static WritableHandle allocateDirect(long capacityBytes, MemoryRequestServer memReqSvr) {
-    return WritableMemoryImpl.allocateDirect(capacityBytes, memReqSvr);
+    MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
+    return WritableMemoryImpl.allocateDirect(capacityBytes, mReqSvr);
   }
   
   //REGIONS
@@ -602,10 +600,11 @@ public interface WritableMemory extends Memory {
   
   //OTHER WRITABLE API METHODS
   /**
-   * For Direct Memory only. Other types of backing resources will return null.
-   * Gets the MemoryRequestServer object used by dynamic off-heap (Direct) memory objects
-   * to request additional memory.
-   * Set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
+   * For ByteBuffer and Direct Memory backed resources only. Heap and Map backed resources will return null.
+   * Gets the MemoryRequestServer object used by dynamic Memory-backed objects
+   * to request additional memory.  To customize the actions of the MemoryRequestServer, 
+   * extend the MemoryRequestServer interfact and 
+   * set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
    * If not explicity set, this returns the {@link DefaultMemoryRequestServer}.
    * @return the MemoryRequestServer object (if direct memory) or null.
    */
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
index 1c798c3..584e4a3 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
@@ -22,6 +22,8 @@ package org.apache.datasketches.memory.internal;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for ByteBuffer, non-native byte order.
  *
@@ -33,6 +35,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   private final Object unsafeObj;
   private final long nativeBaseOffset; //used to compute cumBaseOffset
   private final ByteBuffer byteBuf; //holds a reference to a ByteBuffer until we are done with it.
+  private MemoryRequestServer memReqSvr = null; //cannot be final;
   private final byte typeId;
 
   BBNonNativeWritableBufferImpl(
@@ -82,6 +85,12 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    assertValid();
+    return memReqSvr; //cannot be null
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
index ff3f3c5..7416901 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
@@ -22,6 +22,8 @@ package org.apache.datasketches.memory.internal;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for ByteBuffer, non-native byte order.
  *
@@ -33,6 +35,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   private final Object unsafeObj;
   private final long nativeBaseOffset; //used to compute cumBaseOffset
   private final ByteBuffer byteBuf; //holds a reference to a ByteBuffer until we are done with it.
+  private MemoryRequestServer memReqSvr = null; //cannot be final;
   private final byte typeId;
 
   BBNonNativeWritableMemoryImpl(
@@ -41,11 +44,13 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
       final long regionOffset,
       final long capacityBytes,
       final int typeId,
-      final ByteBuffer byteBuf) {
+      final ByteBuffer byteBuf,
+      final MemoryRequestServer memReqSvr) {
     super(unsafeObj, nativeBaseOffset, regionOffset, capacityBytes);
     this.unsafeObj = unsafeObj;
     this.nativeBaseOffset = nativeBaseOffset;
     this.byteBuf = byteBuf;
+    this.memReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
     this.typeId = (byte) (id | (typeId & 0x7));
   }
 
@@ -56,10 +61,10 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
     return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
-            type, getByteBuffer())
+            type, getByteBuffer(), memReqSvr)
         : new BBNonNativeWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
-            type, getByteBuffer());
+            type, getByteBuffer(), memReqSvr);
   }
 
   @Override
@@ -81,6 +86,12 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    assertValid();
+    return memReqSvr; //cannot be null
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
index d924f9a..eadd15e 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
@@ -22,6 +22,8 @@ package org.apache.datasketches.memory.internal;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for ByteBuffer, native byte order.
  *
@@ -33,6 +35,7 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
   private final Object unsafeObj;
   private final long nativeBaseOffset; //used to compute cumBaseOffset
   private final ByteBuffer byteBuf; //holds a reference to a ByteBuffer until we are done with it.
+  private MemoryRequestServer memReqSvr = null; //cannot be final;
   private final byte typeId;
 
   BBWritableBufferImpl(
@@ -82,6 +85,12 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    assertValid();
+    return memReqSvr; //cannot be null
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
index 4a9e4ca..2cd0052 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
@@ -22,6 +22,8 @@ package org.apache.datasketches.memory.internal;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for ByteBuffer, native byte order.
  *
@@ -33,6 +35,7 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
   private final Object unsafeObj;
   private final long nativeBaseOffset; //used to compute cumBaseOffset
   private final ByteBuffer byteBuf; //holds a reference to a ByteBuffer until we are done with it.
+  private MemoryRequestServer memReqSvr = null; //cannot be final;
   private final byte typeId;
 
   BBWritableMemoryImpl(
@@ -41,11 +44,13 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
       final long regionOffset,
       final long capacityBytes,
       final int typeId,
-      final ByteBuffer byteBuf) {
+      final ByteBuffer byteBuf,
+      final MemoryRequestServer memReqSvr) {
     super(unsafeObj, nativeBaseOffset, regionOffset, capacityBytes);
     this.unsafeObj = unsafeObj;
     this.nativeBaseOffset = nativeBaseOffset;
     this.byteBuf = byteBuf;
+    this.memReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
     this.typeId = (byte) (id | (typeId & 0x7));
   }
 
@@ -56,10 +61,10 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
     return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
-            type, getByteBuffer())
+            type, getByteBuffer(), memReqSvr)
         : new BBNonNativeWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
-            type, getByteBuffer());
+            type, getByteBuffer(), memReqSvr);
   }
 
   @Override
@@ -81,6 +86,12 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    assertValid();
+    return memReqSvr; //cannot be null
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
index 28ed3dd..53b4a79 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
@@ -29,7 +29,6 @@ import java.nio.ByteOrder;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.datasketches.memory.BaseState;
-import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.MemoryRequestServer;
 
 /**
@@ -47,7 +46,7 @@ public abstract class BaseStateImpl implements BaseState {
   static final AtomicLong currentDirectMemoryMapAllocations_ = new AtomicLong();
   static final AtomicLong currentDirectMemoryMapAllocated_ = new AtomicLong();
 
-  static final MemoryRequestServer defaultMemReqSvr = new DefaultMemoryRequestServer();
+  
 
   //class type IDs. Do not change the bit orders
   // 0000 0XXX
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
index 640171a..5464382 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
@@ -89,7 +89,8 @@ abstract class BaseWritableMemoryImpl extends WritableMemoryImpl {
   }
 
   static BaseWritableMemoryImpl wrapByteBuffer(
-      final ByteBuffer byteBuf, final boolean localReadOnly, final ByteOrder byteOrder) {
+      final ByteBuffer byteBuf, final boolean localReadOnly, final ByteOrder byteOrder, 
+      final MemoryRequestServer memReqSvr) {
     final AccessByteBuffer abb = new AccessByteBuffer(byteBuf);
     if (abb.resourceReadOnly && !localReadOnly) {
       throw new ReadOnlyException("ByteBuffer is Read Only");
@@ -97,9 +98,9 @@ abstract class BaseWritableMemoryImpl extends WritableMemoryImpl {
     final int typeId = (abb.resourceReadOnly || localReadOnly) ? READONLY : 0;
     return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
-            abb.regionOffset, abb.capacityBytes, typeId, byteBuf)
+            abb.regionOffset, abb.capacityBytes, typeId, byteBuf, memReqSvr)
         : new BBNonNativeWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
-            abb.regionOffset, abb.capacityBytes,  typeId, byteBuf);
+            abb.regionOffset, abb.capacityBytes,  typeId, byteBuf, memReqSvr);
   }
 
   @SuppressWarnings("resource")
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BufferImpl.java
index e673261..a9a1106 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BufferImpl.java
@@ -48,14 +48,14 @@ public abstract class BufferImpl extends BaseBufferImpl implements Buffer {
 
   public static BufferImpl wrap(final ByteBuffer byteBuf, final ByteOrder byteOrder) {
     final BaseWritableMemoryImpl wmem =
-        BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteOrder);
+        BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteOrder, defaultMemReqSvr);
     final WritableBufferImpl wbuf = wmem.asWritableBuffer(true, byteOrder);
     wbuf.setStartPositionEnd(0, byteBuf.position(), byteBuf.limit());
     return wbuf;
   }
 
   //MAP
-  //Use MemoryImpl for mapping files and the asBuffer()
+  //Use MemoryImpl for mapping files and then call asBuffer()
 
   //DUPLICATES
   @Override
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
index 5957fc6..457870f 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
@@ -98,11 +98,4 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
     return valid.get();
   }
 
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
-  
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
index 9c0ee47..48b92eb 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
@@ -96,11 +96,4 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
     return valid.get();
   }
 
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
-  
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
index b5c3609..e7048a6 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
@@ -98,10 +98,4 @@ final class DirectWritableBufferImpl extends NativeWritableBufferImpl {
     return valid.get();
   }
 
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableBufferImpl.java
index 5a74126..2e81c3f 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableBufferImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for heap-based, non-native byte order.
  *
@@ -69,6 +71,11 @@ final class HeapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   int getTypeId() {
     return typeId & 0xff;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableMemoryImpl.java
index 04b3033..fad9d89 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapNonNativeWritableMemoryImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for heap-based, non-native byte order.
  *
@@ -68,6 +70,11 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   int getTypeId() {
     return typeId & 0xff;
   }
@@ -76,5 +83,5 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
   Object getUnsafeObject() {
     return unsafeObj;
   }
-
+  
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableBufferImpl.java
index 5a9316f..641b4c4 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableBufferImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for heap-based, native byte order.
  *
@@ -69,6 +71,11 @@ final class HeapWritableBufferImpl extends NativeWritableBufferImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   int getTypeId() {
     return typeId & 0xff;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableMemoryImpl.java
index 4aa398a..806cc16 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/HeapWritableMemoryImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for heap-based, native byte order.
  *
@@ -68,6 +70,11 @@ final class HeapWritableMemoryImpl extends NativeWritableMemoryImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   int getTypeId() {
     return typeId & 0xff;
   }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableBufferImpl.java
index 0f135d5..f0302b9 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableBufferImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for map memory, non-native byte order.
  *
@@ -72,6 +74,11 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
@@ -86,11 +93,4 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
     return valid.get();
   }
 
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
-  
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableMemoryImpl.java
index 9920c2d..25f002b 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapNonNativeWritableMemoryImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for map memory, non-native byte order.
  *
@@ -71,6 +73,11 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
@@ -84,12 +91,5 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   public boolean isValid() {
     return valid.get();
   }
-
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
   
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableBufferImpl.java
index eafe417..4174518 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableBufferImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableBufferImpl} for map memory, native byte order.
  *
@@ -72,6 +74,11 @@ final class MapWritableBufferImpl extends NativeWritableBufferImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
@@ -86,11 +93,4 @@ final class MapWritableBufferImpl extends NativeWritableBufferImpl {
     return valid.get();
   }
 
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
-  
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableMemoryImpl.java
index 5c9377a..8ee8a23 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MapWritableMemoryImpl.java
@@ -21,6 +21,8 @@ package org.apache.datasketches.memory.internal;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+
 /**
  * Implementation of {@link WritableMemoryImpl} for map memory, native byte order.
  *
@@ -71,6 +73,11 @@ final class MapWritableMemoryImpl extends NativeWritableMemoryImpl {
   }
 
   @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
+  
+  @Override
   long getNativeBaseOffset() {
     return nativeBaseOffset;
   }
@@ -84,12 +91,5 @@ final class MapWritableMemoryImpl extends NativeWritableMemoryImpl {
   public boolean isValid() {
     return valid.get();
   }
-
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("MemoryImpl not valid.");
-    }
-  }
   
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MemoryImpl.java
index dc236eb..aaaac73 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/MemoryImpl.java
@@ -53,11 +53,11 @@ public abstract class MemoryImpl extends BaseStateImpl implements Memory {
 
   //BYTE BUFFER
   public static MemoryImpl wrap(final ByteBuffer byteBuf) {
-    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteBuf.order());
+    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteBuf.order(), defaultMemReqSvr);
   }
 
   public static MemoryImpl wrap(final ByteBuffer byteBuf, final ByteOrder byteOrder) {
-    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteOrder);
+    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, true, byteOrder, defaultMemReqSvr);
   }
 
   //MAP
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java
index 4f53d40..020e5a4 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java
@@ -42,12 +42,13 @@ public abstract class WritableBufferImpl extends BufferImpl implements WritableB
 
   //BYTE BUFFER
   public static WritableBufferImpl writableWrap(final ByteBuffer byteBuf) {
-    return writableWrap(byteBuf, byteBuf.order());
+    return writableWrap(byteBuf, byteBuf.order(), defaultMemReqSvr);
   }
 
-  public static WritableBufferImpl writableWrap(final ByteBuffer byteBuf, final ByteOrder byteOrder) {
+  public static WritableBufferImpl writableWrap(final ByteBuffer byteBuf, final ByteOrder byteOrder,
+      final MemoryRequestServer memReqSvr) {
     final BaseWritableMemoryImpl wmem =
-        BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteOrder);
+        BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteOrder, memReqSvr);
     final WritableBufferImpl wbuf = wmem.asWritableBuffer(false, byteOrder);
     wbuf.setStartPositionEnd(0, byteBuf.position(), byteBuf.limit());
     return wbuf;
@@ -166,10 +167,4 @@ public abstract class WritableBufferImpl extends BufferImpl implements WritableB
   @Override
   public abstract void fill(byte value);
 
-  //OTHER WRITABLE API METHODS
-  @Override
-  public MemoryRequestServer getMemoryRequestServer() {
-    return null;
-  }
-
 }
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
index bc24430..a4c32a5 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
@@ -50,11 +50,12 @@ public abstract class WritableMemoryImpl extends MemoryImpl implements WritableM
 
   //BYTE BUFFER
   public static WritableMemoryImpl writableWrap(final ByteBuffer byteBuf) {
-    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteBuf.order());
+    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteBuf.order(), defaultMemReqSvr);
   }
 
-  public static WritableMemoryImpl writableWrap(final ByteBuffer byteBuf, final ByteOrder byteOrder) {
-    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteOrder);
+  public static WritableMemoryImpl writableWrap(final ByteBuffer byteBuf, final ByteOrder byteOrder,
+      final MemoryRequestServer memReqSvr) {
+    return BaseWritableMemoryImpl.wrapByteBuffer(byteBuf, false, byteOrder, memReqSvr);
   }
 
   //MAP
@@ -250,11 +251,4 @@ public abstract class WritableMemoryImpl extends MemoryImpl implements WritableM
   @Override
   public abstract void setBits(long offsetBytes, byte bitMask);
 
-  
-  //OTHER WRITABLE API METHODS
-  @Override
-  public MemoryRequestServer getMemoryRequestServer() {
-    return null;
-  }
-  
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org