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/25 00:25:16 UTC
incubator-geode git commit: refactor decodeAddressToBytes into two
methods
Repository: incubator-geode
Updated Branches:
refs/heads/feature/GEODE-1451 [created] 9ef366e0c
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/9ef366e0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/9ef366e0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/9ef366e0
Branch: refs/heads/feature/GEODE-1451
Commit: 9ef366e0c0dee93521bdbeb2361fe0dc2738d839
Parents: bd892f5
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Tue May 24 17:22:54 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Tue May 24 17:22:54 2016 -0700
----------------------------------------------------------------------
.../offheap/OffHeapRegionEntryHelper.java | 27 ++++++++++++++------
.../internal/offheap/TinyStoredObject.java | 9 ++++---
.../OffHeapRegionEntryHelperJUnitTest.java | 17 +++++++++---
3 files changed, 38 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9ef366e0/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..d90597f 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,25 @@ public class OffHeapRegionEntryHelper {
return (int) ((addr & SIZE_MASK) >> SIZE_SHIFT);
}
- static byte[] decodeAddressToBytes(long addr, boolean decompress, boolean compressedOk) {
- assert (addr & ENCODED_BIT) != 0;
+ /**
+ * 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) {
boolean isCompressed = (addr & COMPRESSED_BIT) != 0;
+ if (isCompressed) {
+ throw new UnsupportedOperationException("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;
int size = (int) ((addr & SIZE_MASK) >> SIZE_SHIFT);
boolean isLong = (addr & LONG_BIT) != 0;
byte[] bytes;
@@ -305,11 +321,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/9ef366e0/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/9ef366e0/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..f3ee7c4 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
@@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.nio.ByteBuffer;
+import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
@@ -212,7 +213,7 @@ public class OffHeapRegionEntryHelperJUnitTest {
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);
@@ -223,7 +224,7 @@ public class OffHeapRegionEntryHelperJUnitTest {
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);
@@ -232,7 +233,17 @@ public class OffHeapRegionEntryHelperJUnitTest {
@Test(expected = UnsupportedOperationException.class)
public void decodeDataAsAddressShouldThrowExceptionIfDataIsCompressedAndItsNotOkToBeCompressed() {
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