You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2016/03/05 01:51:25 UTC

[25/38] incubator-geode git commit: more cleanup to get rid of off-heap stuff in ObjectStoredInMemory.

more cleanup to get rid of off-heap stuff in ObjectStoredInMemory.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7dd27db5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7dd27db5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7dd27db5

Branch: refs/heads/feature/GEODE-982
Commit: 7dd27db5671a9a100e7ce57a11945fb94f2ec8c0
Parents: b75d040
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Tue Mar 1 17:14:05 2016 -0800
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Tue Mar 1 17:14:05 2016 -0800

----------------------------------------------------------------------
 .../offheap/AddressableStoredObject.java        | 12 +++++++++
 .../internal/offheap/FreeListManager.java       |  4 +--
 .../internal/offheap/ObjectStoredInMemory.java  | 28 ++++++--------------
 .../internal/offheap/FreeListManagerTest.java   |  2 +-
 .../offheap/FreeListOffHeapRegionJUnitTest.java |  2 +-
 .../internal/offheap/ObjectChunkJUnitTest.java  | 13 +++------
 .../OldFreeListOffHeapRegionJUnitTest.java      |  2 +-
 .../offheap/SimpleMemoryAllocatorJUnitTest.java |  8 +++---
 .../management/OffHeapManagementDUnitTest.java  |  6 ++---
 9 files changed, 36 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/AddressableStoredObject.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/AddressableStoredObject.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/AddressableStoredObject.java
index 597eec4..666070c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/AddressableStoredObject.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/AddressableStoredObject.java
@@ -16,7 +16,10 @@
  */
 package com.gemstone.gemfire.internal.offheap;
 
+import java.nio.ByteBuffer;
+
 import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
 
 /**
  * Represents a stored object whose stored data is also addressable.
@@ -64,6 +67,15 @@ public interface AddressableStoredObject extends StoredObject, Releasable {
   public void writeDataBytes(int offset, byte[] bytes);
   public void readDataBytes(int offset, byte[] bytes, int bytesOffset, int size);
   public void writeDataBytes(int offset, byte[] bytes, int bytesOffset, int size);
+  /**
+   * Creates and returns a direct ByteBuffer that contains the data of this stored object.
+   * Note that the returned ByteBuffer has a reference to the
+   * address of this stored object so it can only be used while this stored object is retained.
+   * @return the created direct byte buffer or null if it could not be created.
+   */
+  @Unretained
+  public ByteBuffer createDirectByteBuffer();
+
   
   /**
    * Call to indicate that this object's memory is in use by the caller.

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/FreeListManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/FreeListManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/FreeListManager.java
index 048372b..7d927b0 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/FreeListManager.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/FreeListManager.java
@@ -196,7 +196,7 @@ public class FreeListManager {
       // to adjust the size so that the header gets allocated.
       // If useSlabs is false then the incoming size has already
       // been adjusted.
-      size += ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+      size += ObjectStoredInMemory.HEADER_SIZE;
     }
     if (size <= MAX_TINY) {
       return allocateTiny(size, useSlabs);
@@ -635,7 +635,7 @@ public class FreeListManager {
     NavigableSet<ObjectStoredInMemory> ts = this.hugeChunkSet.tailSet(sizeHolder);
     ObjectStoredInMemory result = ts.pollFirst();
     if (result != null) {
-      if (result.getSize() - (HUGE_MULTIPLE - ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE) < size) {
+      if (result.getSize() - (HUGE_MULTIPLE - ObjectStoredInMemory.HEADER_SIZE) < size) {
         // close enough to the requested size; just return it.
         checkDataIntegrity(result);
         result.readyForAllocation();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ObjectStoredInMemory.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ObjectStoredInMemory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ObjectStoredInMemory.java
index a26db69..aa5da80 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ObjectStoredInMemory.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ObjectStoredInMemory.java
@@ -53,15 +53,15 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
     
     /**
      * The useCount, chunkSize, dataSizeDelta, isSerialized, and isCompressed
-     * are all stored in off heap memory in a HEADER. This saves heap memory
+     * are all stored in addressable memory in a HEADER. This saves heap memory
      * by using off heap.
      */
-    public final static int OFF_HEAP_HEADER_SIZE = 4 + 4;
+    public final static int HEADER_SIZE = 4 + 4;
     /**
      * We need to smallest chunk to at least have enough room for a hdr
      * and for an off heap ref (which is a long).
      */
-    public final static int MIN_CHUNK_SIZE = OFF_HEAP_HEADER_SIZE + 8;
+    public final static int MIN_CHUNK_SIZE = HEADER_SIZE + 8;
     /**
      * int field.
      * The number of bytes in this chunk.
@@ -162,7 +162,7 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
       final byte[] dataCache2 = new byte[dataCache1.length];
       // TODO OFFHEAP: no need to copy to heap. Just get the address of each and compare each byte. No need to call incReads when reading from address.
       int i;
-      // inc it twice since we are reading two different off-heap objects
+      // inc it twice since we are reading two different objects
       SimpleMemoryAllocatorImpl.getAllocator().getStats().incReads();
       SimpleMemoryAllocatorImpl.getAllocator().getStats().incReads();
       for (i=0; i < mySize-(dataCache1.length-1); i+=dataCache1.length) {
@@ -277,18 +277,13 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
     }
     
     protected long getBaseDataAddress() {
-      return this.memoryAddress+OFF_HEAP_HEADER_SIZE;
+      return this.memoryAddress+HEADER_SIZE;
     }
     protected int getBaseDataOffset() {
       return 0;
     }
     
-    /**
-     * Creates and returns a direct ByteBuffer that contains the contents of this Chunk.
-     * Note that the returned ByteBuffer has a reference to this chunk's
-     * off-heap address so it can only be used while this Chunk is retained.
-     * @return the created direct byte buffer or null if it could not be created.
-     */
+    @Override
     @Unretained
     public ByteBuffer createDirectByteBuffer() {
       return basicCreateDirectByteBuffer(getBaseDataAddress(), getDataSize());
@@ -603,11 +598,11 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
     }
     public static long getNext(long memAddr) {
       SimpleMemoryAllocatorImpl.validateAddress(memAddr);
-      return AddressableMemoryManager.readLong(memAddr+OFF_HEAP_HEADER_SIZE);
+      return AddressableMemoryManager.readLong(memAddr+HEADER_SIZE);
     }
     public static void setNext(long memAddr, long next) {
       SimpleMemoryAllocatorImpl.validateAddress(memAddr);
-      AddressableMemoryManager.writeLong(memAddr+OFF_HEAP_HEADER_SIZE, next);
+      AddressableMemoryManager.writeLong(memAddr+HEADER_SIZE, next);
     }
     
     /**
@@ -780,13 +775,6 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
     
     @Override
     public String toString() {
-      return toStringForOffHeapByteSource();
-      // This old impl is not safe because it calls getDeserializedForReading and we have code that call toString that does not inc the refcount.
-      // Also if this Chunk is compressed we don't know how to decompress it.
-      //return super.toString() + ":<dataSize=" + getDataSize() + " refCount=" + getRefCount() + " addr=" + getMemoryAddress() + " storedObject=" + getDeserializedForReading() + ">";
-    }
-    
-    protected String toStringForOffHeapByteSource() {
       return super.toString() + ":<dataSize=" + getDataSize() + " refCount=" + getRefCount() + " addr=" + Long.toHexString(getMemoryAddress()) + ">";
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListManagerTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListManagerTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListManagerTest.java
index b7151e8..35befc4 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListManagerTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListManagerTest.java
@@ -251,7 +251,7 @@ public class FreeListManagerTest {
   }
   
   private int computeExpectedSize(int dataSize) {
-    return ((dataSize + ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE + 7) / 8) * 8;
+    return ((dataSize + ObjectStoredInMemory.HEADER_SIZE + 7) / 8) * 8;
   }
 
   @Test(expected = AssertionError.class)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListOffHeapRegionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListOffHeapRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListOffHeapRegionJUnitTest.java
index 5f80939..eb4096b 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListOffHeapRegionJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/FreeListOffHeapRegionJUnitTest.java
@@ -40,7 +40,7 @@ public class FreeListOffHeapRegionJUnitTest extends OffHeapRegionBase {
 
   @Override
   public int perObjectOverhead() {
-    return ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    return ObjectStoredInMemory.HEADER_SIZE;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/ObjectChunkJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/ObjectChunkJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/ObjectChunkJUnitTest.java
index e7cd408..6603867 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/ObjectChunkJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/ObjectChunkJUnitTest.java
@@ -201,7 +201,7 @@ public class ObjectChunkJUnitTest extends AbstractStoredObjectTestBase {
   @Test
   public void getShortClassNameShouldReturnShortClassName() {
     ObjectStoredInMemory chunk = createValueAsUnserializedStoredObject(getValue());
-    assertThat(chunk.getShortClassName()).isEqualTo("ObjectChunk");
+    assertThat(chunk.getShortClassName()).isEqualTo("ObjectStoredInMemory");
 
     chunk.release();
   }
@@ -610,7 +610,7 @@ public class ObjectChunkJUnitTest extends AbstractStoredObjectTestBase {
     long bufferAddress = ObjectStoredInMemory.getDirectByteBufferAddress(buffer);
 
     // returned address should be starting of the value (after skipping HEADER_SIZE bytes)
-    assertEquals(chunk.getMemoryAddress() + ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE, bufferAddress);
+    assertEquals(chunk.getMemoryAddress() + ObjectStoredInMemory.HEADER_SIZE, bufferAddress);
 
     chunk.release();
   }
@@ -769,16 +769,11 @@ public class ObjectChunkJUnitTest extends AbstractStoredObjectTestBase {
   }
 
   @Test
-  public void testToStringForOffHeapByteSource() {
+  public void testToString() {
     ObjectStoredInMemory chunk = createValueAsUnserializedStoredObject(getValue());
 
     String expected = ":<dataSize=" + chunk.getDataSize() + " refCount=" + chunk.getRefCount() + " addr=" + Long.toHexString(chunk.getMemoryAddress()) + ">";
-    assertThat(chunk.toStringForOffHeapByteSource()).endsWith(expected);
-
-    // test toString
-    ObjectStoredInMemory spy = spy(chunk);
-    spy.toString();
-    verify(spy, times(1)).toStringForOffHeapByteSource();
+    assertThat(chunk.toString()).endsWith(expected);
 
     chunk.release();
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OldFreeListOffHeapRegionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OldFreeListOffHeapRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OldFreeListOffHeapRegionJUnitTest.java
index a58a421..8fecf8a 100755
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OldFreeListOffHeapRegionJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OldFreeListOffHeapRegionJUnitTest.java
@@ -41,7 +41,7 @@ public class OldFreeListOffHeapRegionJUnitTest extends OffHeapRegionBase {
 
   @Override
   public int perObjectOverhead() {
-    return ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    return ObjectStoredInMemory.HEADER_SIZE;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorJUnitTest.java
index d5a7fe8..72bee62 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorJUnitTest.java
@@ -191,7 +191,7 @@ public class SimpleMemoryAllocatorJUnitTest {
     int BATCH_SIZE = 1;
     int TINY_MULTIPLE = com.gemstone.gemfire.internal.offheap.FreeListManager.TINY_MULTIPLE;
     int HUGE_MULTIPLE = com.gemstone.gemfire.internal.offheap.FreeListManager.HUGE_MULTIPLE;
-    int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.HEADER_SIZE;
     int maxTiny = com.gemstone.gemfire.internal.offheap.FreeListManager.MAX_TINY-perObjectOverhead;
     int minHuge = maxTiny+1;
     int TOTAL_MEM = (maxTiny+perObjectOverhead)*BATCH_SIZE /*+ (maxBig+perObjectOverhead)*BATCH_SIZE*/ + round(TINY_MULTIPLE, minHuge+1+perObjectOverhead)*BATCH_SIZE + (TINY_MULTIPLE+perObjectOverhead)*BATCH_SIZE /*+ (MIN_BIG_SIZE+perObjectOverhead)*BATCH_SIZE*/ + round(TINY_MULTIPLE, minHuge+perObjectOverhead+1);
@@ -427,7 +427,7 @@ public class SimpleMemoryAllocatorJUnitTest {
   
   @Test
   public void testCompaction() {
-    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.HEADER_SIZE;
     final int BIG_ALLOC_SIZE = 150000;
     final int SMALL_ALLOC_SIZE = BIG_ALLOC_SIZE/2;
     final int TOTAL_MEM = BIG_ALLOC_SIZE;
@@ -543,7 +543,7 @@ public class SimpleMemoryAllocatorJUnitTest {
   boolean memoryUsageEventReceived;
   @Test
   public void testUsageEventListener() {
-    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.HEADER_SIZE;
     final int SMALL_ALLOC_SIZE = 1000;
     SlabImpl slab = new SlabImpl(3000);
     try {
@@ -596,7 +596,7 @@ public class SimpleMemoryAllocatorJUnitTest {
   
   @Test
   public void testOutOfOffHeapMemory() {
-    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+    final int perObjectOverhead = com.gemstone.gemfire.internal.offheap.ObjectStoredInMemory.HEADER_SIZE;
     final int BIG_ALLOC_SIZE = 150000;
     final int SMALL_ALLOC_SIZE = BIG_ALLOC_SIZE/2;
     final int TOTAL_MEM = BIG_ALLOC_SIZE;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7dd27db5/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java
index ab1fce7..fc7f124 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java
@@ -240,7 +240,7 @@ public class OffHeapManagementDUnitTest extends CacheTestCase {
       
       // After allocating large chunk (equal to total memory) 
       // we should still have no fragmentation
-      int largeChunk = (int) TOTAL_MEMORY - ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+      int largeChunk = (int) TOTAL_MEMORY - ObjectStoredInMemory.HEADER_SIZE;
       doPutOnVm(vm, KEY, new byte[largeChunk], OFF_HEAP_REGION_NAME, false);
       // No compaction has run, so fragmentation should be zero
       assertFragmentationStatOnVm(vm,0,ASSERT_OP.EQUAL);
@@ -255,7 +255,7 @@ public class OffHeapManagementDUnitTest extends CacheTestCase {
       assertFragmentationStatOnVm(vm,0,ASSERT_OP.EQUAL);
       
       // Allocate HALF_TOTAL_MEMORY twice and release one to create one fragment
-      int halfChunk = HALF_TOTAL_MEMORY - ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+      int halfChunk = HALF_TOTAL_MEMORY - ObjectStoredInMemory.HEADER_SIZE;
       doPutOnVm(vm, KEY + "0", new byte[halfChunk], OFF_HEAP_REGION_NAME, false);
       doPutOnVm(vm, KEY + "1", new byte[halfChunk], OFF_HEAP_REGION_NAME, false);
       doDestroyOnVm(vm, KEY + "0", OFF_HEAP_REGION_NAME);
@@ -267,7 +267,7 @@ public class OffHeapManagementDUnitTest extends CacheTestCase {
       
       // Consume the available fragment as below
       // [16][262120][16][262120][16] = [524288] (HALF_TOTAL_MEMORY)
-      int smallChunk = ObjectStoredInMemory.MIN_CHUNK_SIZE - ObjectStoredInMemory.OFF_HEAP_HEADER_SIZE;
+      int smallChunk = ObjectStoredInMemory.MIN_CHUNK_SIZE - ObjectStoredInMemory.HEADER_SIZE;
       int mediumChunk = 262112; //(262120 - ObjectChunk.OFF_HEAP_HEADER_SIZE)
       doPutOnVm(vm, KEY + "S1", new byte[smallChunk], OFF_HEAP_REGION_NAME, false);
       doPutOnVm(vm, KEY + "M1", new byte[mediumChunk], OFF_HEAP_REGION_NAME, false);