You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kh...@apache.org on 2017/03/28 16:46:46 UTC
[18/35] geode git commit: GEODE-2535: added a boolean flag to track
if the value of a RecoveredEntry is in memory or on disk
GEODE-2535: added a boolean flag to track if the value of a RecoveredEntry is in memory or on disk
Update stat based on the boolean value.
Avoid negating keyId by using the boolean flag.
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/af2121d9
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/af2121d9
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/af2121d9
Branch: refs/heads/feature/GEODE-2420
Commit: af2121d928d4c8944b383e78c10ccc2126b34bc4
Parents: 45da1b2
Author: eshu <es...@pivotal.io>
Authored: Wed Mar 22 11:46:25 2017 -0700
Committer: Ken Howe <kh...@pivotal.io>
Committed: Mon Mar 27 14:01:44 2017 -0700
----------------------------------------------------------------------
.../geode/internal/cache/AbstractRegionMap.java | 4 +-
.../apache/geode/internal/cache/DiskEntry.java | 209 ++++++++-----------
.../org/apache/geode/internal/cache/DiskId.java | 22 --
.../geode/internal/cache/DiskStoreImpl.java | 3 -
.../org/apache/geode/internal/cache/Oplog.java | 5 +-
.../cache/DiskRegRecoveryJUnitTest.java | 50 ++++-
.../geode/internal/cache/OplogJUnitTest.java | 4 +-
7 files changed, 132 insertions(+), 165 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
index e3e87ea..eaababa 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
@@ -719,8 +719,8 @@ public abstract class AbstractRegionMap implements RegionMap {
_getOwner().calculateRegionEntryValueSize(re));
}
} else {
- DiskEntry.Helper.updateRecoveredEntry((PlaceHolderDiskRegion) _getOwnerObject(),
- (DiskEntry) re, value, (RegionEntryContext) _getOwnerObject());
+ value.applyToDiskEntry((PlaceHolderDiskRegion) _getOwnerObject(), (DiskEntry) re,
+ (RegionEntryContext) _getOwnerObject());
}
} catch (RegionClearedException rce) {
throw new IllegalStateException(
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/main/java/org/apache/geode/internal/cache/DiskEntry.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskEntry.java
index d00f7a0..bf7c4d2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskEntry.java
@@ -455,7 +455,7 @@ public interface DiskEntry extends RegionEntry {
did.setKeyId(re.getRecoveredKeyId());
did.setUserBits(re.getUserBits());
did.setValueLength(re.getValueLength());
- if (re.getRecoveredKeyId() < 0) {
+ if (!re.getValueRecovered()) {
updateStats(drv, r, 0/* InVM */, 1/* OnDisk */, did.getValueLength());
} else {
entry.setValueWithContext(drv,
@@ -899,63 +899,7 @@ public interface DiskEntry extends RegionEntry {
}
}
} else if (newValue instanceof RecoveredEntry) {
- // Now that oplog creates are immediately put in cache
- // a later oplog modify will get us here
- RecoveredEntry re = (RecoveredEntry) newValue;
- long oldKeyId = did.getKeyId();
- Object oldValueAsToken = entry.getValueAsToken();
- long oldOplogId = did.getOplogId();
- long newOplogId = re.getOplogId();
- if (newOplogId != oldOplogId) {
- did.setOplogId(newOplogId);
- re.setOplogId(oldOplogId); // so caller knows oldoplog id
- }
- did.setOffsetInOplog(re.getOffsetInOplog());
- // id already set
- did.setUserBits(re.getUserBits());
- oldValueLength = did.getValueLength();
- did.setValueLength(re.getValueLength());
-
- if (re.getRecoveredKeyId() < 0) {
- if (!entry.isValueNull()) {
- entry.handleValueOverflow(region);
- entry.setValueWithContext(region, null); // fixes bug 41119
- }
- } else {
- entry.setValueWithContext(region,
- entry.prepareValueForCache(region, re.getValue(), false));
- }
-
- if (re.getRecoveredKeyId() < 0) { // recovering an entry whose new value is on disk
- if (oldKeyId >= 0) { // the entry's old value is in vm
- // TODO: oldKeyId == 0 is the ILLEGAL id; what does that indicate?
- int inVM = -1;
- if (Token.isInvalidOrRemoved(oldValueAsToken)) { // but tokens are never in vm
- inVM = 0;
- }
- updateStats(dr, region, inVM, 1/* OnDisk */, did.getValueLength());
- } else { // the entry's old value is also on disk
- int valueLenDelta = -oldValueLength; // but it is no longer
- valueLenDelta += did.getValueLength(); // new one is now on disk
- updateStats(dr, region, 0, 0, valueLenDelta);
- }
- } else { // recovering an entry whose new value is in vm
- int inVM = 1;
- if (Token.isInvalidOrRemoved(re.getValue())) { // but tokens never in vm
- inVM = 0;
- }
- if (oldKeyId < 0) { // the entry's old value is on disk
- updateStats(dr, region, inVM, -1/* OnDisk */, -oldValueLength);
- } else { // the entry's old value was in the vm
- if (inVM == 1 && Token.isInvalidOrRemoved(oldValueAsToken)) {
- // the old state was not in vm and not on disk. But now we are in vm.
- updateStats(dr, region, 1, 0, 0);
- } else if (inVM == 0 && !Token.isInvalidOrRemoved(oldValueAsToken)) {
- // the old state was in vm and not on disk. But now we are not in vm.
- updateStats(dr, region, -1, 0, 0);
- }
- }
- }
+ ((RecoveredEntry) newValue).applyToDiskEntry(entry, region, dr, did);
} else {
// The new value in the entry needs to be set after the disk writing
// has succeeded.
@@ -1054,67 +998,6 @@ public interface DiskEntry extends RegionEntry {
return result;
}
- public static void updateRecoveredEntry(PlaceHolderDiskRegion drv, DiskEntry entry,
- RecoveredEntry newValue, RegionEntryContext context) {
- if (newValue == null) {
- throw new NullPointerException(
- LocalizedStrings.DiskEntry_ENTRYS_VALUE_SHOULD_NOT_BE_NULL.toLocalizedString());
- }
- DiskId did = entry.getDiskId();
- synchronized (did) {
- Object oldValueAsToken = entry.getValueAsToken();
- boolean oldValueWasNull = oldValueAsToken == null;
- int oldValueLength = did.getValueLength();
- // Now that oplog creates are immediately put in cache
- // a later oplog modify will get us here
- long oldOplogId = did.getOplogId();
- long newOplogId = newValue.getOplogId();
- if (newOplogId != oldOplogId) {
- did.setOplogId(newOplogId);
- newValue.setOplogId(oldOplogId); // so caller knows oldoplog id
- }
- did.setOffsetInOplog(newValue.getOffsetInOplog());
- // id already set
- did.setUserBits(newValue.getUserBits());
- did.setValueLength(newValue.getValueLength());
- if (newValue.getRecoveredKeyId() >= 0) {
- entry.setValueWithContext(context,
- entry.prepareValueForCache(drv, newValue.getValue(), false));
- int inVM = 1;
- if (Token.isInvalidOrRemoved(newValue.getValue())) { // but tokens never in vm
- inVM = 0;
- }
- if (oldValueWasNull) { // the entry's old value is on disk
- updateStats(drv, null, inVM, -1/* OnDisk */, -oldValueLength);
- } else { // the entry's old value was in the vm
- if (inVM == 1 && Token.isInvalidOrRemoved(oldValueAsToken)) {
- // the old state was not in vm and not on disk. But now we are in vm.
- updateStats(drv, null, 1, 0, 0);
- } else if (inVM == 0 && !Token.isInvalidOrRemoved(oldValueAsToken)) {
- // the old state was in vm and not on disk. But now we are not in vm.
- updateStats(drv, null, -1, 0, 0);
- }
- }
- } else {
- if (!oldValueWasNull) {
- entry.handleValueOverflow(context);
- entry.setValueWithContext(context, null); // fixes bug 41119
- }
- if (!oldValueWasNull) { // the entry's old value is in vm
- int inVM = -1;
- if (Token.isInvalidOrRemoved(oldValueAsToken)) { // but tokens are never in vm
- inVM = 0;
- }
- updateStats(drv, null, inVM, 1/* OnDisk */, did.getValueLength());
- } else { // the entry's old value is also on disk
- int valueLenDelta = -oldValueLength; // but it is no longer
- valueLenDelta += did.getValueLength(); // new one is now on disk
- updateStats(drv, null, 0, 0, valueLenDelta);
- }
- }
- }
- }
-
public static Object getValueInVMOrDiskWithoutFaultIn(DiskEntry entry, LocalRegion region) {
Object result =
OffHeapHelper.copyAndReleaseIfNeeded(getValueOffHeapOrDiskWithoutFaultIn(entry, region));
@@ -1282,9 +1165,6 @@ public interface DiskEntry extends RegionEntry {
// must have been destroyed
value = null;
} else {
- if (did.isKeyIdNegative()) {
- did.setKeyId(-did.getKeyId());
- }
// if a bucket region then create a CachedDeserializable here instead of object
value = dr.getRaw(did); // fix bug 40192
if (value instanceof BytesAndBits) {
@@ -1688,9 +1568,7 @@ public interface DiskEntry extends RegionEntry {
}
AsyncDiskEntry result = null;
- // Asif: This will convert the -ve OplogKeyId to positive as part of fixing
// Bug # 39989
- // GEODE-2535 fix should address the original #39989 negative keyId issue.
did.unmarkForWriting();
// System.out.println("DEBUG: removeFromDisk doing remove(" + id + ")");
@@ -1786,6 +1664,9 @@ public interface DiskEntry extends RegionEntry {
private long oplogId;
private VersionTag tag;
+ /** whether the entry value has been faulted in after recovery. */
+ private final boolean valueRecovered;
+
/**
* Only for this constructor, the value is not loaded into the region & it is lying on the
* oplogs. Since Oplogs rely on DiskId to furnish user bits so as to correctly interpret bytes,
@@ -1793,17 +1674,23 @@ public interface DiskEntry extends RegionEntry {
*/
public RecoveredEntry(long keyId, long oplogId, long offsetInOplog, byte userBits,
int valueLength) {
- this(-keyId, oplogId, offsetInOplog, userBits, valueLength, null);
+ this(keyId, oplogId, offsetInOplog, userBits, valueLength, null, false);
}
public RecoveredEntry(long keyId, long oplogId, long offsetInOplog, byte userBits,
int valueLength, Object value) {
+ this(keyId, oplogId, offsetInOplog, userBits, valueLength, value, true);
+ }
+
+ public RecoveredEntry(long keyId, long oplogId, long offsetInOplog, byte userBits,
+ int valueLength, Object value, boolean valueRecovered) {
this.recoveredKeyId = keyId;
this.value = value;
this.oplogId = oplogId;
this.offsetInOplog = offsetInOplog;
this.userBits = EntryBits.setRecoveredFromDisk(userBits, true);
this.valueLength = valueLength;
+ this.valueRecovered = valueRecovered;
}
/**
@@ -1847,6 +1734,10 @@ public interface DiskEntry extends RegionEntry {
this.oplogId = v;
}
+ public boolean getValueRecovered() {
+ return this.valueRecovered;
+ }
+
public VersionTag getVersionTag() {
return this.tag;
}
@@ -1854,5 +1745,73 @@ public interface DiskEntry extends RegionEntry {
public void setVersionTag(VersionTag tag) {
this.tag = tag;
}
+
+ public void applyToDiskEntry(PlaceHolderDiskRegion drv, DiskEntry entry,
+ RegionEntryContext context) {
+ DiskId did = entry.getDiskId();
+ synchronized (did) {
+ applyToDiskEntry(entry, context, drv, did);
+ }
+ }
+
+ public void applyToDiskEntry(DiskEntry entry, RegionEntryContext region, AbstractDiskRegion dr,
+ DiskId did) {
+ int oldValueLength;
+ // Now that oplog creates are immediately put in cache
+ // a later oplog modify will get us here
+ Object oldValueAsToken = entry.getValueAsToken();
+ boolean oldValueWasNull = oldValueAsToken == null;
+ long oldOplogId = did.getOplogId();
+ long newOplogId = getOplogId();
+ if (newOplogId != oldOplogId) {
+ did.setOplogId(newOplogId);
+ setOplogId(oldOplogId); // so caller knows oldoplog id
+ }
+ did.setOffsetInOplog(getOffsetInOplog());
+ // id already set
+ did.setUserBits(getUserBits());
+ oldValueLength = did.getValueLength();
+ did.setValueLength(getValueLength());
+
+ if (!getValueRecovered()) {
+ if (!oldValueWasNull) {
+ entry.handleValueOverflow(region);
+ entry.setValueWithContext(region, null); // fixes bug 41119
+ }
+ } else {
+ entry.setValueWithContext(region, entry.prepareValueForCache(region, getValue(), false));
+ }
+
+ if (!getValueRecovered()) { // recovering an entry whose new value is on disk
+ if (!oldValueWasNull) { // the entry's old value is in vm
+ // TODO: oldKeyId == 0 is the ILLEGAL id; what does that indicate?
+ int inVM = -1;
+ if (Token.isInvalidOrRemoved(oldValueAsToken)) { // but tokens are never in vm
+ inVM = 0;
+ }
+ Helper.updateStats(dr, region, inVM, 1/* OnDisk */, did.getValueLength());
+ } else { // the entry's old value is also on disk
+ int valueLenDelta = -oldValueLength; // but it is no longer
+ valueLenDelta += did.getValueLength(); // new one is now on disk
+ Helper.updateStats(dr, region, 0, 0, valueLenDelta);
+ }
+ } else { // recovering an entry whose new value is in vm
+ int inVM = 1;
+ if (Token.isInvalidOrRemoved(getValue())) { // but tokens never in vm
+ inVM = 0;
+ }
+ if (oldValueWasNull) { // the entry's old value is on disk
+ Helper.updateStats(dr, region, inVM, -1/* OnDisk */, -oldValueLength);
+ } else { // the entry's old value was in the vm
+ if (inVM == 1 && Token.isInvalidOrRemoved(oldValueAsToken)) {
+ // the old state was not in vm and not on disk. But now we are in vm.
+ Helper.updateStats(dr, region, 1, 0, 0);
+ } else if (inVM == 0 && !Token.isInvalidOrRemoved(oldValueAsToken)) {
+ // the old state was in vm and not on disk. But now we are not in vm.
+ Helper.updateStats(dr, region, -1, 0, 0);
+ }
+ }
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/main/java/org/apache/geode/internal/cache/DiskId.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskId.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskId.java
index 8d2c675..fba88f1 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskId.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskId.java
@@ -92,8 +92,6 @@ public abstract class DiskId {
*/
abstract void setOffsetInOplog(long offsetInOplog);
- abstract boolean isKeyIdNegative();
-
abstract void markForWriting();
abstract void unmarkForWriting();
@@ -409,11 +407,6 @@ public abstract class DiskId {
}
@Override
- boolean isKeyIdNegative() {
- return false;
- }
-
- @Override
void markForWriting() {
this.valueLength |= 0x80000000;
}
@@ -483,11 +476,6 @@ public abstract class DiskId {
}
@Override
- boolean isKeyIdNegative() {
- return false;
- }
-
- @Override
void markForWriting() {
this.valueLength |= 0x80000000;
}
@@ -552,11 +540,6 @@ public abstract class DiskId {
}
@Override
- boolean isKeyIdNegative() {
- return this.keyId < 0;
- }
-
- @Override
void markForWriting() {
throw new IllegalStateException("Should not be used for persistent region");
}
@@ -630,11 +613,6 @@ public abstract class DiskId {
}
@Override
- boolean isKeyIdNegative() {
- return this.keyId < 0;
- }
-
- @Override
void markForWriting() {
throw new IllegalStateException("Should not be used for persistent region");
}
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
index 642eed3..b97f428 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
@@ -703,9 +703,6 @@ public class DiskStoreImpl implements DiskStore {
throws RegionClearedException {
DiskRegion dr = region.getDiskRegion();
DiskId id = entry.getDiskId();
- if (dr.isBackup() && id.getKeyId() < 0) {
- id.setKeyId(-id.getKeyId());
- }
long start = async ? this.stats.startFlush() : this.stats.startWrite();
if (!async) {
dr.getStats().startWrite();
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index 27f41a2..f6b4023 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -3659,7 +3659,6 @@ public final class Oplog implements CompactableOplog, Flushable {
// This allows us to not encode the oplogEntryId explicitly in the
// record
long createOplogEntryId = getOplogSet().newOplogEntryId();
- long old_kid = id.getKeyId();
id.setKeyId(createOplogEntryId);
// startPosForSynchOp = this.crf.currSize;
@@ -3989,7 +3988,7 @@ public final class Oplog implements CompactableOplog, Flushable {
return;
}
userBits = di.getUserBits();
- oplogKeyId = Math.abs(di.getKeyId());
+ oplogKeyId = di.getKeyId();
valueOffset = di.getOffsetInOplog();
valueLength = di.getValueLength();
deKey = de.getKey();
@@ -6812,7 +6811,7 @@ public final class Oplog implements CompactableOplog, Flushable {
Assert.fail("Attempting to write an entry with keyId=0 to oplog. Entry key="
+ entry.getKey() + " diskId=" + entry.getDiskId() + " region=" + dr);
}
- long delta = calcDelta(abs(keyId), this.opCode);
+ long delta = calcDelta(keyId, this.opCode);
this.deltaIdBytesLength = bytesNeeded(delta);
this.size += this.deltaIdBytesLength;
this.opCode += this.deltaIdBytesLength - 1;
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/test/java/org/apache/geode/internal/cache/DiskRegRecoveryJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/DiskRegRecoveryJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/DiskRegRecoveryJUnitTest.java
index 3fd091b..dea84b5 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/DiskRegRecoveryJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/DiskRegRecoveryJUnitTest.java
@@ -858,27 +858,26 @@ public class DiskRegRecoveryJUnitTest extends DiskRegionTestingBase {
b = EntryBits.setRecoveredFromDisk(b, true);
b = EntryBits.setWithVersions(b, true);
- // TODO darrel: need to wait for async recovery so keyIds will not be
- // negative.
- // TODO darrel: the current impl of KRF always has the keyId negative
- // until a real get is done.
+ // TODO need to wait for async recovery
for (int i = 0; i < 3; ++i) {
DiskEntry de = (DiskEntry) rgn.basicGetEntry("" + i);
DiskId did = de.getDiskId();
- // assertTrue(did.getKeyId() < 0);
+ assertTrue(did.getKeyId() > 0);
assertEquals(1, did.getOplogId());
assertTrue(did.getOffsetInOplog() > -1);
assertEquals(b, did.getUserBits());
assertTrue(did.getValueLength() > 0);
assertEquals("" + i, rgn.get("" + i));
assertTrue(did.getKeyId() > 0);
+ assertFalse(de.isValueNull());
}
// this last oplog does not have a krf because this disk store has not
- // been closed. So its keyIds are > 0.
+ // been closed. So its value should be in memory now.
for (int i = 3; i < 6; ++i) {
DiskEntry de = (DiskEntry) rgn.basicGetEntry("" + i);
DiskId did = de.getDiskId();
assertTrue(did.getKeyId() > 0);
+ assertFalse(de.isValueNull());
assertEquals(2, did.getOplogId());
assertTrue(did.getOffsetInOplog() > -1);
assertEquals(b, did.getUserBits());
@@ -1010,23 +1009,27 @@ public class DiskRegRecoveryJUnitTest extends DiskRegionTestingBase {
for (int i = 0; i < 3; ++i) {
DiskEntry de = (DiskEntry) rgn.basicGetEntry("" + i);
DiskId did = de.getDiskId();
- assertTrue(did.getKeyId() < 0);
+ assertTrue(did.getKeyId() > 0);
+ assertTrue(de.isValueNull());
assertEquals(1, did.getOplogId());
assertTrue(did.getOffsetInOplog() > -1);
assertEquals(b, did.getUserBits());
assertTrue(did.getValueLength() > 0);
assertEquals("" + i, rgn.get("" + i));
+ assertFalse(de.isValueNull());
assertTrue(did.getKeyId() > 0);
}
for (int i = 3; i < 6; ++i) {
DiskEntry de = (DiskEntry) rgn.basicGetEntry("" + i);
DiskId did = de.getDiskId();
- assertTrue(did.getKeyId() < 0);
+ assertTrue(de.isValueNull());
+ assertTrue(did.getKeyId() > 0);
assertEquals(2, did.getOplogId());
assertTrue(did.getOffsetInOplog() > -1);
assertEquals(b, did.getUserBits());
assertTrue(did.getValueLength() > 0);
assertEquals("" + i, rgn.get("" + i));
+ assertFalse(de.isValueNull());
assertTrue(did.getKeyId() > 0);
}
// ((LocalRegion)region).getDiskStore().forceCompaction();
@@ -1316,6 +1319,7 @@ public class DiskRegRecoveryJUnitTest extends DiskRegionTestingBase {
assertEquals(0, dr.getNumOverflowOnDisk());
region.put(new Integer(1), new Integer(1));
+ region.put(new Integer(1), new Integer(2));
region.localInvalidate(new Integer(1));
region.close();
region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, diskProps, Scope.LOCAL);
@@ -1355,6 +1359,35 @@ public class DiskRegRecoveryJUnitTest extends DiskRegionTestingBase {
assertEquals(0, dr.getNumEntriesInVM());
assertEquals(0, dr.getNumOverflowOnDisk());
+ region.clear();
+ assertEquals(0, dr.getNumEntriesInVM());
+ assertEquals(0, dr.getNumOverflowOnDisk());
+
+ region.create(new Integer(1), null);
+ region.put(new Integer(1), new Integer(2));
+ region.destroy(new Integer(1));
+ region.close(); // No KRF generated, force multiple reads from CRF for same key
+ region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, diskProps, Scope.LOCAL);
+ dr = ((LocalRegion) region).getDiskRegion();
+ // entry destroyed so not inVM or onDisk
+ assertEquals(0, dr.getNumEntriesInVM());
+ assertEquals(0, dr.getNumOverflowOnDisk());
+
+ region.clear();
+ assertEquals(0, dr.getNumEntriesInVM());
+ assertEquals(0, dr.getNumOverflowOnDisk());
+
+ region.create(new Integer(1), null);
+ region.put(new Integer(1), new Integer(2));
+ region.destroy(new Integer(1));
+ region.put(new Integer(1), new Integer(2)); // recreate
+ region.invalidate(new Integer(1));
+ region.close(); // No KRF generated, force multiple reads from CRF for same key
+ region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, diskProps, Scope.LOCAL);
+ dr = ((LocalRegion) region).getDiskRegion();
+ // entry invalidated so not inVM or onDisk
+ assertEquals(0, dr.getNumEntriesInVM());
+ assertEquals(0, dr.getNumOverflowOnDisk());
} finally {
if (oldValue != null) {
System.setProperty(DiskStoreImpl.RECOVER_VALUE_PROPERTY_NAME, oldValue);
@@ -1379,5 +1412,6 @@ public class DiskRegRecoveryJUnitTest extends DiskRegionTestingBase {
public void testVerifyStatsNoValues() {
basicVerifyStats(false);
}
+
}
http://git-wip-us.apache.org/repos/asf/geode/blob/af2121d9/geode-core/src/test/java/org/apache/geode/internal/cache/OplogJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogJUnitTest.java
index 7549ea7..02e0a82 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogJUnitTest.java
@@ -1075,10 +1075,10 @@ public class OplogJUnitTest extends DiskRegionTestingBase {
case OP_MODIFY:
// @todo how do a know if the key needed to be serialized?
- size += 1 + 4 + val.length + Oplog.bytesNeeded(Oplog.abs(opKey));
+ size += 1 + 4 + val.length + Oplog.bytesNeeded(opKey);
break;
case OP_DEL:
- size += Oplog.bytesNeeded(Oplog.abs(opKey));
+ size += Oplog.bytesNeeded(opKey);
break;
}
return size;