public long getVersionForMember(VersionSource member) { return this.versionVector.getVersionForMember(member); }
/** * Update the on disk GC version for the given member, only if the disk has actually recorded all * of the updates including that member. * * @param diskRVV the RVV for what has been persisted * @param inMemoryRVV the RVV of what is in memory * @param member The member we're trying to update */ private void updateDiskGCRVV(RegionVersionVector diskRVV, RegionVersionVector inMemoryRVV, VersionSource member) { long diskVersion = diskRVV.getVersionForMember(member); long memoryGCVersion = inMemoryRVV.getGCVersion(member); // If the GC version is less than what we have on disk, go ahead // and record it. if (memoryGCVersion <= diskVersion) { diskRVV.recordGCVersion(member, memoryGCVersion); } }
@Test public void usesOldVersionIfGreaterThanNewVersion() throws Exception { VersionSource<InternalDistributedMember> ownerId = mock(VersionSource.class); long oldVersion = 2; long newVersion = 1; RegionVersionVector rvv = new TestableRegionVersionVector(ownerId, oldVersion); rvv.updateLocalVersion(newVersion); assertThat(rvv.getVersionForMember(ownerId)).isEqualTo(oldVersion); }
@Test public void usesNewVersionIfGreaterThanOldVersion() throws Exception { VersionSource<InternalDistributedMember> ownerId = mock(VersionSource.class); long oldVersion = 1; long newVersion = 2; RegionVersionVector rvv = new TestableRegionVersionVector(ownerId, oldVersion); rvv.updateLocalVersion(newVersion); assertThat(rvv.getVersionForMember(ownerId)).isEqualTo(newVersion); }
@Test public void doesNothingIfVersionsAreSame() throws Exception { VersionSource<InternalDistributedMember> ownerId = mock(VersionSource.class); long oldVersion = 2; long sameVersion = 2; RegionVersionVector rvv = new TestableRegionVersionVector(ownerId, oldVersion); rvv.updateLocalVersion(sameVersion); assertThat(rvv.getVersionForMember(ownerId)).isEqualTo(oldVersion); }
@Test public void doesNotHangIfOtherThreadChangedVersion() throws Exception { VersionSource<InternalDistributedMember> ownerId = mock(VersionSource.class); long oldVersion = 1; long newVersion = 2; RegionVersionVector rvv = new VersionRaceConditionRegionVersionVector(ownerId, oldVersion); Future<Void> result = executorServiceRule.runAsync(() -> rvv.updateLocalVersion(newVersion)); assertThatCode(() -> result.get(2, SECONDS)).doesNotThrowAnyException(); assertThat(rvv.getVersionForMember(ownerId)).isEqualTo(newVersion); }
@Test public void testRecordVersionDuringRegionInit() { LocalRegion mockRegion = mock(LocalRegion.class); when(mockRegion.isInitialized()).thenReturn(false); final String local = getIPLiteral(); InternalDistributedMember ownerId = new InternalDistributedMember(local, 101); VMVersionTag tag = new VMVersionTag(); tag.setRegionVersion(1L); RegionVersionVector rvv = createRegionVersionVector(ownerId, mockRegion); rvv.recordVersion(ownerId, tag); assertEquals(1, rvv.getVersionForMember(ownerId)); }
target, lostMember); long hisVersion = this.region.getVersionVector().getVersionForMember(lostMemberVersionID);
System.out.println("for test (a) formed this RVV: " + rv1.fullToString()); assertEquals(8, rv1.getVersionForMember(server2)); assertEquals(2, rv1.getExceptionCount(server2)); rv1.recordVersion(server2, 3); System.out.println("for test (a) RVV is now: " + rv1.fullToString()); assertEquals(8, rv1.getVersionForMember(server2)); assertEquals(2, rv1.getExceptionCount(server2)); rv1.recordVersion(server2, 4);