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/05/26 18:24:11 UTC

incubator-geode git commit: GEODE-1451: refactor decodeAddressToBytes into two methods

Repository: incubator-geode
Updated Branches:
  refs/heads/develop cae188cda -> f73f25251


GEODE-1451: refactor decodeAddressToBytes into two methods

The boolean parameters have been removed and two
methods now exist:
1. decodeAddressToRawBytes(long)
2. decodeUncompressedAddressToBytes(long)


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

Branch: refs/heads/develop
Commit: f73f25251feccb61b3c3699bf98ab7d5a90edacd
Parents: cae188c
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Tue May 24 17:22:54 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Thu May 26 11:23:48 2016 -0700

----------------------------------------------------------------------
 .../offheap/OffHeapRegionEntryHelper.java       | 24 +++++++----
 .../internal/offheap/TinyStoredObject.java      |  9 ++--
 .../OffHeapRegionEntryHelperJUnitTest.java      | 45 +++++++++++++++++---
 3 files changed, 59 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f73f2525/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java
index 8b57c43..0909306 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java
@@ -261,7 +261,7 @@ public class OffHeapRegionEntryHelper {
   }
 
   static Object decodeAddressToObject(long ohAddress) {
-      byte[] bytes = decodeAddressToBytes(ohAddress, true, false);
+      byte[] bytes = decodeUncompressedAddressToBytes(ohAddress);
 
       boolean isSerialized = (ohAddress & SERIALIZED_BIT) != 0;
       if (isSerialized) {
@@ -280,9 +280,22 @@ public class OffHeapRegionEntryHelper {
     return (int) ((addr & SIZE_MASK) >> SIZE_SHIFT);
   }
   
-  static byte[] decodeAddressToBytes(long addr, boolean decompress, boolean compressedOk) {
+  /**
+   * Returns the bytes encoded in the given address.
+   * Note that compressed addresses are not supported by this method.
+   * @throws UnsupportedOperationException if the address has compressed data
+   */
+  static byte[] decodeUncompressedAddressToBytes(long addr) {
+    assert (addr & COMPRESSED_BIT) == 0 : "Did not expect encoded address to be compressed";
+    return decodeAddressToRawBytes(addr);
+  }
+  
+  /**
+   * Returns the "raw" bytes that have been encoded in the given address.
+   * Note that if address is compressed then the raw bytes are the compressed bytes.
+   */
+  static byte[] decodeAddressToRawBytes(long addr) {
     assert (addr & ENCODED_BIT) != 0;
-    boolean isCompressed = (addr & COMPRESSED_BIT) != 0;
     int size = (int) ((addr & SIZE_MASK) >> SIZE_SHIFT);
     boolean isLong = (addr & LONG_BIT) != 0;
     byte[] bytes;
@@ -305,11 +318,6 @@ public class OffHeapRegionEntryHelper {
         bytes[i] = (byte) (addr & 0x00ff);
       }
     }
-    if (decompress && isCompressed) {
-      if (!compressedOk) {
-        throw new UnsupportedOperationException("Did not expect encoded address to be compressed");
-      }
-    }
     return bytes;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f73f2525/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/TinyStoredObject.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/TinyStoredObject.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/TinyStoredObject.java
index aee1b15..9404865 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/TinyStoredObject.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/TinyStoredObject.java
@@ -74,13 +74,14 @@ public class TinyStoredObject extends AbstractStoredObject {
   }
 
   public byte[] getDecompressedBytes(RegionEntryContext r) {
-    byte[] bytes = OffHeapRegionEntryHelper.decodeAddressToBytes(getAddress(), true, true);
     if (isCompressed()) {
+        byte[] bytes = OffHeapRegionEntryHelper.decodeAddressToRawBytes(getAddress());
         long time = r.getCachePerfStats().startDecompression();
         bytes = r.getCompressor().decompress(bytes);
         r.getCachePerfStats().endDecompression(time);
+        return bytes;
     }
-    return bytes;
+    return getRawBytes();
   }
 
   /**
@@ -88,12 +89,12 @@ public class TinyStoredObject extends AbstractStoredObject {
    * Otherwise return the serialize bytes in us in a byte array.
    */
   public byte[] getRawBytes() {
-    return OffHeapRegionEntryHelper.decodeAddressToBytes(getAddress(), true, false);
+    return OffHeapRegionEntryHelper.decodeUncompressedAddressToBytes(getAddress());
   }
   
   @Override
   public byte[] getSerializedValue() {
-    byte[] value = OffHeapRegionEntryHelper.decodeAddressToBytes(this.address, true, false);
+    byte[] value = getRawBytes();
     if (!isSerialized()) {
       value = EntryEventImpl.serialize(value);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f73f2525/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
index b9b3dfc..7190e8b 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
@@ -22,7 +22,9 @@ import static org.mockito.Mockito.*;
 import java.nio.ByteBuffer;
 
 import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
@@ -53,6 +55,25 @@ public class OffHeapRegionEntryHelperJUnitTest {
 
   private static final Long VALUE_IS_NOT_ENCODABLE = 0L;
 
+  private static Boolean assertionsEnabled;
+
+  @BeforeClass
+  public static void setUpOnce() {
+    try {
+      assert false;
+      assertionsEnabled = false;
+    } catch (AssertionError e) {
+      assertionsEnabled = true;
+    }
+    ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
+    System.out.println("assertionsEnabled = " + assertionsEnabled);
+  }
+
+  @AfterClass
+  public static void tearDownOnce() {
+    ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(assertionsEnabled);
+  }
+
   private MemoryAllocator ma;
 
   @Before
@@ -208,31 +229,41 @@ public class OffHeapRegionEntryHelperJUnitTest {
   }
 
   @Test
-  public void decodeAddressToBytesShouldReturnActualBytes() {
+  public void decodeUncompressedAddressToBytesShouldReturnActualBytes() {
     long encodedAddress = 549755813697L;
     Integer value = Integer.MAX_VALUE;
 
-    byte[] actual = OffHeapRegionEntryHelper.decodeAddressToBytes(encodedAddress, false, false);
+    byte[] actual = OffHeapRegionEntryHelper.decodeUncompressedAddressToBytes(encodedAddress);
     byte[] expectedValue = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE).putInt(value).array();
 
     assertThat(actual).isEqualTo(expectedValue);
   }
 
   @Test
-  public void decodeDataAsAddressShouldDecodeLongIfItsSerializedAndIfItsNotTooBig() {
+  public void decodeUncompressedAddressToBytesShouldDecodeLongIfItsSerializedAndIfItsNotTooBig() {
     Long value = 0L;
     long encodedAddress = 123L;
 
-    byte[] actual = OffHeapRegionEntryHelper.decodeAddressToBytes(encodedAddress, false, false);
+    byte[] actual = OffHeapRegionEntryHelper.decodeUncompressedAddressToBytes(encodedAddress);
     byte[] expectedValue = EntryEventImpl.serialize(value);
 
     assertThat(actual).isEqualTo(expectedValue);
   }
 
-  @Test(expected = UnsupportedOperationException.class)
-  public void decodeDataAsAddressShouldThrowExceptionIfDataIsCompressedAndItsNotOkToBeCompressed() {
+  @Test(expected = AssertionError.class)
+  public void decodeUncompressedAddressToBytesWithCompressedAddressShouldThrowException() {
     long encodedAddress = 549755813703L;
-    OffHeapRegionEntryHelper.decodeAddressToBytes(encodedAddress, true, false);
+    OffHeapRegionEntryHelper.decodeUncompressedAddressToBytes(encodedAddress);
+  }
+  
+  @Test
+  public void decodeCompressedDataAsAddressToRawBytes() {
+    long encodedAddress = 549755813703L;
+    byte[] expected = new byte[]{127, -1, -1, -1};
+
+    byte[] bytes = OffHeapRegionEntryHelper.decodeAddressToRawBytes(encodedAddress);
+
+    assertThat(bytes).isEqualTo(expected);
   }
 
   @Test