@Override public void recordVersion(DiskStoreID member, long version, EntryEventImpl event) { //TODO - RVV - This is a temporary check to make sure we get //an exception if we try to add a non disk store id to this vector super.recordVersion(member, version, event); }
@Override public void recordVersion(DiskStoreID member, long version) { //TODO - RVV - This is a temporary check to make sure we get //an exception if we try to add a non disk store id to this vector super.recordVersion(member, version); }
public void recordVersion(T member, long version) { recordVersion(member, version, null); }
/** * return the next local version number */ private long getNextVersion(boolean checkLocked) { if (checkLocked && this.locked) { // this should never be the case. If version generation is locked and we get here // then the path to this point is not protected by getting the version generation // lock from the RVV but it should be if (logger.isDebugEnabled()) { logger.debug("Generating a version tag when version generation is locked by {}", this.lockOwner); } } long new_version = localVersion.incrementAndGet(); // since there could be special exception, we have to use recordVersion() recordVersion(getOwnerId(), new_version); return new_version; }
public void recordRecoveredVersionTag(VersionTag tag) { this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion(), null); }
public void recordRecoveredVersionTag(VersionTag tag) { this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion()); }
/** * return the next local version number */ private final long getNextVersion(boolean checkLocked, EntryEventImpl event) { if (checkLocked && this.locked) { // this should never be the case. If version generation is locked and we get here // then the path to this point is not protected by getting the version generation // lock from the RVV but it should be LogWriterI18n log = getLoggerI18n(); if (log != null && log.fineEnabled()) { log.fine("generating a version tag when version generation is locked by " + this.lockOwner, new Exception("Stack trace")); } } long new_version = localVersion.incrementAndGet(); // since there could be special exception, we have to use recordVersion() recordVersion(getOwnerId(), new_version, event); return new_version; }
/** * reserves the next delta version numbers * required for tx when */ private final long getNextVersion(int delta, boolean checkLocked, EntryEventImpl event) { if (checkLocked && this.locked) { // this should never be the case. If version generation is locked and we get here // then the path to this point is not protected by getting the version generation // lock from the RVV but it should be LogWriterI18n log = getLoggerI18n(); if (log != null && log.fineEnabled()) { log.fine("generating a version tag when version generation is locked by " + this.lockOwner, new Exception("Stack trace")); } } long new_version = localVersion.addAndGet(delta); // since there could be special exception, we have to use recordVersion() recordVersion(getOwnerId(), new_version, event); return new_version; }
@Override public void recordRecoveredVersionTag(VersionTag tag) { this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion(), null); DiskRegion dr = this.getDiskRegion(); //We also need to update the RVV that represents what we have persisted on disk if(dr != null) { dr.recordRecoveredVersionTag(tag); } }
@Override public void recordRecoveredVersionTag(VersionTag tag) { if(this.concurrencyChecksEnabled) { this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion()); DiskRegion dr = this.getDiskRegion(); //We also need to update the RVV that represents what we have persisted on disk if(dr != null) { dr.recordRecoveredVersionTag(tag); } } }
/** * 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()) { Assert.fail( "recordVersion invoked for a local version tag that is higher than our local version. rvv=" + this + ", tag=" + tag + " " + regionName); } } } recordVersion(member, tag.getRegionVersion()); }
/** * Ensure that a version tag has been recorded in the region's version vector. * This makes note that the event has been received and processed but probably * didn't affect the cache's state or it would have been recorded earlier. * * @param tag the version information * @param r the affected region */ public void checkVersionIsRecorded(VersionTag tag, LocalRegion r) { if (tag != null && !tag.isRecorded()) { // oops - someone forgot to record the event if (r != null) { RegionVersionVector v = r.getVersionVector(); if (v != null) { VersionSource mbr = tag.getMemberID(); if (mbr == null) { mbr = getSender(); } if (logger.isTraceEnabled()) { logger.trace("recording version tag in RVV in basicProcess since it wasn't done earlier"); } v.recordVersion(mbr, tag); } } } }
recordVersion(member, tag.getRegionVersion(), event);
void basicUpdateEntryVersion(EntryEventImpl event) throws EntryNotFoundException { if (hasSeenEvent(event)) { if(logger.isTraceEnabled(LogMarker.DM)) { logger.trace(LogMarker.DM, "LR.basicDestroy: this cache has already seen this event {}", event); } if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); } return; } getDataView().updateEntryVersion(event); }
/** * Ensure that a version tag has been recorded in the region's version vector. * This makes note that the event has been received and processed but probably * didn't affect the cache's state or it would have been recorded earlier. * * @param tag the version information * @param r the affected region */ public void checkVersionIsRecorded(VersionTag tag, LocalRegion r, EntryEventImpl event) { if (tag != null && !tag.isRecorded()) { // oops - someone forgot to record the event if (r != null) { RegionVersionVector v = r.getVersionVector(); if (v != null) { VersionSource mbr = tag.getMemberID(); if (mbr == null) { mbr = getSender(); } if (r.getLogWriterI18n().finerEnabled()) { r.getLogWriterI18n().finer("recording version tag in RVV in basicProcess since it wasn't done earlier"); } v.recordVersion(mbr, tag, event); } } } }
void basicUpdateEntryVersion(EntryEventImpl event) throws EntryNotFoundException { if (hasSeenEvent(event)) { if (DistributionManager.VERBOSE) { cache.getLoggerI18n().info( LocalizedStrings.DEBUG, "LR.basicDestroy: this cache has already seen this event " + event); } if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag(), event); } return; } getDataView().updateEntryVersion(event); }
getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag());
/** * @param cacheWrite * true if cacheWrite should be performed or false if cacheWrite * should not be performed * @see DistributedRegion#basicDestroy(EntryEventImpl, boolean, Object) */ void basicDestroy(final EntryEventImpl event, final boolean cacheWrite, Object expectedOldValue) throws EntryNotFoundException, CacheWriterException, TimeoutException { if (!event.isOriginRemote()) { checkIfReplicatedAndLocalDestroy(event); } if (hasSeenEvent(event)) { assert getJTAEnlistedTX() == null; if(logger.isTraceEnabled(LogMarker.DM)) { logger.trace(LogMarker.DM, "LR.basicDestroy: this cache has already seen this event {}", event); } if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); } // Bug 49449: When client retried and returned with hasSeenEvent for both LR and DR, the server should still // notifyGatewayHubs even the event could be duplicated in gateway queues1 notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event); return; } discoverJTA(); getDataView().destroyExistingEntry(event, cacheWrite, expectedOldValue); }
/** * Does the "put" of one entry for a "putall" operation. Note it calls back * to AbstractUpdateOperation.UpdateMessage#basicOperationOnRegion * * @param entry * the entry being put * @param rgn * the region the entry is put in */ public void doEntryPut(PutAllEntryData entry, DistributedRegion rgn, boolean requiresRegionContext, boolean fetchFromHDFS, boolean isPutDML) { EntryEventImpl ev = PutAllMessage.createEntryEvent(entry, getSender(), this.context, rgn, requiresRegionContext, this.possibleDuplicate, this.needsRouting, this.callbackArg, true, skipCallbacks); ev.setFetchFromHDFS(fetchFromHDFS); ev.setPutDML(isPutDML); // we don't need to set old value here, because the msg is from remote. local old value will get from next step try { super.basicOperateOnRegion(ev, rgn); } finally { if (ev.getVersionTag() != null && !ev.getVersionTag().isRecorded()) { if (rgn.getVersionVector() != null) { rgn.getVersionVector().recordVersion(getSender(), ev.getVersionTag()); } } ev.release(); } }
getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag(), event);