private void compareVersions(Map<String, VersionTag<VersionSource<?>>> versions, InternalDistributedMember defaultID, List<InternalDistributedMember> vmIds, List<RegionVersionVector<VersionSource<?>>> versionVectors) { for (Map.Entry<String, VersionTag<VersionSource<?>>> entry : versions.entrySet()) { VersionTag<VersionSource<?>> tag = entry.getValue(); tag.replaceNullIDs(defaultID); for (int i = 0; i < vmIds.size(); i++) { assertThat(versionVectors.get(i).contains(tag.getMemberID(), tag.getRegionVersion())) .describedAs( vmIds.get(i) + " should contain " + tag) .isTrue(); } } }
rv1.recordVersion(server2, 10); System.out.println("for test (b) formed this RVV: " + rv1.fullToString()); assertTrue(rv1.contains(server2, 1)); assertTrue(rv1.contains(server2, 5)); assertTrue(rv1.contains(server2, 8)); assertTrue(rv1.contains(server2, 10)); assertFalse(rv1.contains(server2, 2)); assertFalse(rv1.contains(server2, 3)); assertFalse(rv1.contains(server2, 4)); assertFalse(rv1.contains(server2, 9)); assertFalse(rv1.contains(server2, 11)); rv1.recordVersion(server2, 3); System.out.println("for test (b) RVV is now: " + rv1.fullToString()); assertTrue(rv1.contains(server2, 3)); rv1.recordVersion(server2, 2); System.out.println("for test (b) RVV is now: " + rv1.fullToString()); assertTrue(rv1.contains(server2, 2)); assertTrue(rv1.contains(server2, 3)); rv1.recordVersion(server2, 4); System.out.println("for test (b) RVV is now: " + rv1.fullToString()); assertTrue(rv1.contains(server2, 1)); assertTrue(rv1.contains(server2, 2)); assertTrue(rv1.contains(server2, 3)); assertTrue(rv1.contains(server2, 4)); assertTrue(rv1.contains(server2, 5)); rv1.recordVersion(server2, 11); System.out.println("for test (b) RVV is now: " + rv1.fullToString()); assertTrue(rv1.contains(server2, 11)); assertTrue(rv1.contains(server2, 10));
private boolean shouldClear(LocalRegion r, RegionVersionVector rvv, AsyncDiskEntry ade) { if (ade.region != r) { return false; } // If no RVV, remove all of the async items for this region. if (rvv == null) { return true; } // If we are clearing based on an RVV, only remove // entries contained in the RVV if (ade.versionOnly) { return rvv.contains(ade.tag.getMemberID(), ade.tag.getRegionVersion()); } else { VersionStamp stamp = ade.de.getVersionStamp(); VersionSource member = stamp.getMemberID(); if (member == null) { // For overflow only regions, the version member may be null // because that represents the local internal distributed member member = r.getVersionMember(); } return rvv.contains(member, stamp.getRegionVersion()); } }
&& !rvv.contains(tag.getMemberID(), tag.getRegionVersion())) { if (needsSync == null) { needsSync = new HashSet<VersionSource>();
logger.trace(LogMarker.PERSIST_RECOVERY_VERBOSE, "clearRVV={} tag={}", clearRVV, tag); if (clearRVV.contains(tag.getMemberID(), tag.getRegionVersion())) { if (logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE)) { logger.trace(LogMarker.PERSIST_RECOVERY_VERBOSE,
id = myId; if (!remoteRVV.contains(id, stamp.getRegionVersion())) {
assertFalse(singletonRVV.getMemberToVersion().containsKey(server3)); assertTrue(singletonRVV.contains(server1, 1)); assertTrue(singletonRVV.contains(server1, 11)); assertTrue(singletonRVV.contains(server3, 1)); assertTrue(singletonRVV.contains(server3, 11)); assertTrue(singletonRVV.contains(server2, 1)); assertTrue(singletonRVV.contains(server2, 5)); assertTrue(singletonRVV.contains(server2, 8)); assertFalse(singletonRVV.contains(server2, 2)); assertFalse(singletonRVV.contains(server2, 3)); assertFalse(singletonRVV.contains(server2, 4)); assertFalse(singletonRVV.contains(server2, 6)); assertFalse(singletonRVV.contains(server2, 7)); assertFalse(singletonRVV.contains(server2, 9));
if (versionVector.contains(id, stamp.getRegionVersion())) { continue;
id = myId; if (rvv.contains(id, re.getVersionStamp().getRegionVersion())) { if (isTraceEnabled) { logger.trace("region clear op is removing {} {}", re.getKey(),
public void putVersionTagOnly(InternalRegion region, VersionTag tag, boolean async) { DiskRegion dr = region.getDiskRegion(); // this method will only be called by backup oplog assert dr.isBackup(); if (!async) { acquireReadLock(dr); } try { if (dr.isRegionClosed()) { region.getCancelCriterion().checkCancelInProgress(null); throw new RegionDestroyedException( "The DiskRegion has been closed or destroyed", dr.getName()); } if (dr.getRegionVersionVector().contains(tag.getMemberID(), tag.getRegionVersion())) { // No need to write the conflicting tag to disk if the disk RVV already // contains this tag. return; } PersistentOplogSet oplogSet = getPersistentOplogSet(dr); oplogSet.getChild().saveConflictVersionTag(region, tag, async); } finally { if (!async) { releaseReadLock(dr); } } }
id = region.getVersionMember(); if (!rvv.contains(id, getVersionStamp().getRegionVersion())) { entryOK = true;