You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2018/11/14 22:57:56 UTC
[geode] 01/01: GEODE-6058: recordVersion should allow update higher
local version if for non-persistent region
This is an automated email from the ASF dual-hosted git repository.
zhouxj pushed a commit to branch feature/GEODE-6058
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 458ff181f70bb86d555f2b86640f0427ad8b9411
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Wed Nov 14 14:55:07 2018 -0800
GEODE-6058: recordVersion should allow update higher local version if for non-persistent region
---
.../cache/versions/RegionVersionVector.java | 3 +-
.../cache/versions/RegionVersionVectorTest.java | 37 ++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
index 7b03d48..c68b6b8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
@@ -648,8 +648,9 @@ public abstract class RegionVersionVector<T extends VersionSource<?>>
// recovers. So we can only assert that the local member has already seen
// the replayed event.
synchronized (localExceptions) {
+
if (this.localVersion.get() < tag.getRegionVersion() && region != null
- && region.isInitialized()) {
+ && region.isInitialized() && region.getDataPolicy().withPersistence()) {
Assert.fail(
"recordVersion invoked for a local version tag that is higher than our local version. rvv="
+ this + ", tag=" + tag + " " + region.getName());
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
index deb7d4e..27c68ab 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
@@ -43,6 +43,7 @@ import org.junit.rules.ExpectedException;
import org.apache.geode.DataSerializer;
import org.apache.geode.InternalGemFireError;
+import org.apache.geode.cache.DataPolicy;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.HeapDataOutputStream;
import org.apache.geode.internal.Version;
@@ -616,6 +617,42 @@ public class RegionVersionVectorTest {
}
@Test
+ public void recordVersionIntoLocalMemberShouldFailIfRegionIsPersistent() {
+ LocalRegion mockRegion = mock(LocalRegion.class);
+ when(mockRegion.isInitialized()).thenReturn(true);
+ when(mockRegion.getDataPolicy()).thenReturn(DataPolicy.PERSISTENT_REPLICATE);
+ final String local = getIPLiteral();
+ DiskStoreID ownerId = new DiskStoreID();
+
+ DiskRegionVersionVector rvv = new DiskRegionVersionVector(ownerId, mockRegion);
+
+ DiskVersionTag tag = new DiskVersionTag();
+ tag.setRegionVersion(1);
+ tag.setMemberID(ownerId);
+
+ expectedException.expect(InternalGemFireError.class);
+ rvv.recordVersion(ownerId, tag);
+ }
+
+ @Test
+ public void recordVersionIntoLocalMemberShouldPassfRegionIsNonPersistent() {
+ LocalRegion mockRegion = mock(LocalRegion.class);
+ when(mockRegion.isInitialized()).thenReturn(true);
+ when(mockRegion.getDataPolicy()).thenReturn(DataPolicy.REPLICATE);
+ final String local = getIPLiteral();
+ InternalDistributedMember ownerId = new InternalDistributedMember(local, 101);
+ RegionVersionVector rvv = createRegionVersionVector(ownerId, mockRegion);
+
+ VMVersionTag tag = new VMVersionTag();
+ tag.setRegionVersion(1);
+ tag.setMemberID(ownerId);
+
+ rvv.recordVersion(ownerId, tag);
+ assertEquals(1, rvv.getLocalExceptions().version);
+ assertEquals(2, rvv.getNextVersion());
+ }
+
+ @Test
public void usesNewVersionIfGreaterThanOldVersion() throws Exception {
VersionSource<InternalDistributedMember> ownerId = mock(VersionSource.class);
long oldVersion = 1;