@Override public void setVersions(final VersionTag versionTag) { this.memberId = versionTag.getMemberID(); int eVersion = versionTag.getEntryVersion(); this.entryVersionLowBytes = (short) (eVersion & 0xffff); this.entryVersionHighByte = (byte) ((eVersion & 0xff0000) >> 16); this.regionVersionHighBytes = versionTag.getRegionVersionHighBytes(); this.regionVersionLowBytes = versionTag.getRegionVersionLowBytes(); if (!versionTag.isGatewayTag() && this.distributedSystemId == versionTag.getDistributedSystemId()) { if (getVersionTimeStamp() <= versionTag.getVersionTimeStamp()) { setVersionTimeStamp(versionTag.getVersionTimeStamp()); } else { versionTag.setVersionTimeStamp(getVersionTimeStamp()); } } else { setVersionTimeStamp(versionTag.getVersionTimeStamp()); } this.distributedSystemId = (byte) (versionTag.getDistributedSystemId() & 0xff); }
public void recordRecoveredVersionTag(VersionTag tag) { this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion()); }
@Override public VersionTag asVersionTag() { VersionTag tag = VersionTag.create(memberId); tag.setEntryVersion(getEntryVersion()); tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes); tag.setVersionTimeStamp(getVersionTimeStamp()); tag.setDistributedSystemId(this.distributedSystemId); return tag; }
@Override public int compare(VersionTag o1, VersionTag o2) { long result = o1.getRegionVersion() - o2.getRegionVersion(); if (result == 0) { result = o1.getVersionTimeStamp() - o2.getVersionTimeStamp(); } return Long.signum(result); }
byte[] serializeVersionTag(VersionTag tag) throws IOException { int entryVersion = tag.getEntryVersion(); long regionVersion = tag.getRegionVersion(); VersionSource versionMember = tag.getMemberID(); long timestamp = tag.getVersionTimeStamp(); int dsId = tag.getDistributedSystemId(); return serializeVersionTag(entryVersion, regionVersion, versionMember, timestamp, dsId); }
VersionTag tag = VersionTag.create(member); tag.setEntryVersion(v); if (region.getVersionVector() != null) { if (nextRegionVersion != -1) { tag.setRegionVersion(nextRegionVersion); RegionVersionVector rvv = region.getVersionVector(); rvv.recordVersion(rvv.getOwnerId(), nextRegionVersion); tag.setRegionVersion(region.getVersionVector().getNextVersion()); tag.setPreviousMemberID(previous); if (remoteTag != null && remoteTag.isGatewayTag()) { tag.setVersionTimeStamp(remoteTag.getVersionTimeStamp()); tag.setDistributedSystemId(remoteTag.getDistributedSystemId()); tag.setAllowedByResolver(remoteTag.isAllowedByResolver()); } else { long time = region.cacheTimeMillis(); if (time <= stamp.getVersionTimeStamp() && dsid != tag.getDistributedSystemId()) { time = stamp.getVersionTimeStamp() + 1; tag.setVersionTimeStamp(time); tag.setDistributedSystemId(dsid);
@Override public String toString() { StringBuilder s = new StringBuilder(); if (isGatewayTag()) { s.append("{ds=").append(this.distributedSystemId).append("; time=") .append(getVersionTimeStamp()).append("}"); } else { s.append("{v").append(this.entryVersion); s.append("; rv").append(getRegionVersion()); if (this.memberID != null) { s.append("; mbr=").append(this.memberID); } if (hasPreviousMemberID()) { s.append("; prev=").append(this.previousMemberID); } if (this.distributedSystemId >= 0) { s.append("; ds=").append(this.distributedSystemId); } s.append("; time=").append(getVersionTimeStamp()); if (isFromOtherMember()) { s.append("; remote"); } if (this.isAllowedByResolver()) { s.append("; allowed"); } s.append("}"); } return s.toString(); }
if (tag.isGatewayTag()) { if (!tag.isFromOtherMember()) { if (!event.getOperation().isNetSearch()) { if (stamp != null && !tag.isAllowedByResolver()) { int stampDsId = stamp.getDistributedSystemId(); int tagDsId = tag.getDistributedSystemId(); long tagTime = tag.getVersionTimeStamp(); if (stampTime > 0 && (tagTime > stampTime || (tagTime == stampTime && tag.getDistributedSystemId() >= stamp.getDistributedSystemId()))) { if (verbose != null) { verbose.append(" - allowing event"); && (r.getDataPolicy().withPersistence() || !r.getScope().isLocal())) { VersionSource who = tag.getMemberID(); if (who == null) { who = originator; assert !tag.isFromOtherMember() || tag.getMemberID() != null : "remote tag is missing memberID";
private void canonicalizeIDs(VersionTag tag, RegionVersionVector versionVector) { if (tag != null && versionVector != null) { tag.setMemberID(versionVector.getCanonicalId(tag.getMemberID())); if (tag.getPreviousMemberID() != null) { tag.setPreviousMemberID(versionVector.getCanonicalId(tag.getPreviousMemberID())); } } }
/** * Records a received region-version. These are transmitted in VersionTags in messages between * peers and from servers to clients. * * @param tag the version information */ public void recordVersion(T mbr, VersionTag<T> tag) { tag.setRecorded(); assert tag.isRecorded(); T member = tag.getMemberID(); if (member == null) { member = mbr; } if (this.myId.equals(member)) { // We can be asked to record a version for the local member if a persistent // member is restarted and an event is replayed after the persistent member // 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.getDataPolicy().withPersistence()) { Assert.fail( "recordVersion invoked for a local version tag that is higher than our local version. rvv=" + this + ", tag=" + tag + " " + region.getName()); } } } recordVersion(member, tag.getRegionVersion()); }
protected void compareVersionTags(HashMap<String, VersionTag> map1, HashMap<String, VersionTag> map2) { assertEquals(map1.size(), map2.size()); for (String key : map1.keySet()) { VersionTag tag1 = map1.get(key); VersionTag tag2 = map2.get(key); assertEquals(tag1.getEntryVersion(), tag2.getEntryVersion()); assertEquals(tag1.getRegionVersion(), tag2.getRegionVersion()); assertEquals(tag1.getMemberID(), tag2.getMemberID()); } }
if (logger.isTraceEnabled(LogMarker.TOMBSTONE_VERBOSE)) { VersionTag stampTag = stamp.asVersionTag(); if (stampTag.hasValidVersion() && checkForConflict) { if (!tag.isGatewayTag() && stamp.getDistributedSystemId() == tag.getDistributedSystemId() && tag.getVersionTimeStamp() > stamp.getVersionTimeStamp()) { stamp.setVersionTimeStamp(tag.getVersionTimeStamp()); tag.setTimeStampApplied(true); if (verbose != null) { verbose
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(); } } }
} else { if (acceptedVersionTag) { Assert.assertTrue(entryVersion.getMemberID() != null, "GII entry versions must have identifiers"); boolean isTombstone = (newValue == Token.TOMBSTONE); && oldRe.getVersionStamp().asVersionTag().equals(entryVersion); if (isSameTombstone) { return true; entryVersion.getMemberID(), entryVersion.getRegionVersion())) { Assert.assertTrue(entryVersion.getMemberID() != null, "GII entry versions must have identifiers"); boolean isTombstone = (newValue == Token.TOMBSTONE);
/** * @return if there's no valid version tag for this event */ public boolean hasValidVersionTag() { return this.versionTag != null && this.versionTag.hasValidVersion(); }
boolean entriesEqual = stamp != null && stamp.asVersionTag().equals(tag); tag.replaceNullIDs(sender); this.region.getVersionVector().recordVersion(tag.getMemberID(), tag); record = true; } else { tag.replaceNullIDs(sender); this.region.getVersionVector().recordVersion(tag.getMemberID(), tag);
@Override public VersionSource getMemberID() { if (this.versionTag != null) { return this.versionTag.getMemberID(); } return null; }
@Test public void testGetEventTimeWithVersionTagConcurrencyChecksEnabledWithSuggestedTime() { long timestamp = System.currentTimeMillis(); long timestampPlus1 = timestamp + 1000l; long timestampPlus2 = timestamp + 2000l; LocalRegion region = mock(LocalRegion.class); when(region.getConcurrencyChecksEnabled()).thenReturn(true); when(region.cacheTimeMillis()).thenReturn(timestamp); EntryEventImpl e = createEntryEvent(region, null); VersionTag tag = VersionTag.create(mock(InternalDistributedMember.class)); tag.setVersionTimeStamp(timestampPlus1); e.setVersionTag(tag); assertThat(e.getEventTime(timestampPlus2)).isEqualTo(timestampPlus2); assertThat(tag.getVersionTimeStamp()).isEqualTo(timestampPlus2); }
@Override public String toString() { StringBuilder sb = new StringBuilder(50); sb.append("(").append(getKey()).append(",").append(getOldValue()); if (this.bucketId > 0) { sb.append(", b").append(this.bucketId); } if (versionTag != null) { sb.append(",v").append(versionTag.getEntryVersion()) .append(",rv=" + versionTag.getRegionVersion()); } if (filterRouting != null) { sb.append(", ").append(filterRouting); } sb.append(")"); return sb.toString(); }
@Override public void setVersions(VersionTag tag) { this.tag = tag; this.timeStamp = tag.getVersionTimeStamp(); this.dsId = tag.getDistributedSystemId(); }