protected void notifyGatewaySender(EnumListenerEvent operation, EntryEventImpl event) { // We don't need to clone the event for new Gateway Senders. // Preserve the bucket reference for resetting it later. LocalRegion bucketRegion = event.getRegion(); try { event.setRegion(this.partitionedRegion); this.partitionedRegion.notifyGatewaySender(operation, event); } finally { // reset the event region back to bucket region. // This should work as gateway queue create GatewaySenderEvent for // queueing. event.setRegion(bucketRegion); } }
protected void notifyGatewayHubs(EnumListenerEvent operation, EntryEventImpl event) { if (shouldNotifyGatewayHub()) { // We need to clone the event for PRs. EntryEventImpl prEvent = createEventForPR(event); try { this.partitionedRegion.notifyGatewayHubs(operation, prEvent); } finally { prEvent.release(); } } else { // We don't need to clone the event for new Gateway Senders. // Preserve the bucket reference for resetting it later. LocalRegion bucketRegion = event.getRegion(); try { event.setRegion(this.partitionedRegion); this.partitionedRegion.notifyGatewayHubs(operation, event); } finally { // reset the event region back to bucket region. // This should work as gateway queue create GatewaySenderEvent for queueing. event.setRegion(bucketRegion); } } }
/** * Switch the event's region from BucketRegion to owning PR and set originRemote to the given value */ static EntryEventImpl switchEventOwnerAndOriginRemote(EntryEventImpl event, boolean originRemote) { assert event != null; if (event.getRegion().isUsedForPartitionedRegionBucket()) { LocalRegion pr = event.getRegion().getPartitionedRegion(); event.setRegion(pr); } event.setOriginRemote(originRemote); return event; }
/** * Switch the event's region from BucketRegion to owning PR and set originRemote to the given value */ static EntryEventImpl switchEventOwnerAndOriginRemote(EntryEventImpl event, boolean originRemote) { assert event != null; if (event.getRegion().isUsedForPartitionedRegionBucket()) { LocalRegion pr = event.getRegion().getPartitionedRegion(); event.setRegion(pr); } event.setOriginRemote(originRemote); return event; }
private void handleMessageRetry(LocalRegion region, EntryEventImpl clientEvent) { if (clientEvent.isPossibleDuplicate()) { if (region.getAttributes().getConcurrencyChecksEnabled()) { // recover the version tag from other servers clientEvent.setRegion(region); if (!recoverVersionTagForRetriedOperation(clientEvent)) { // no-one has seen this event clientEvent.setPossibleDuplicate(false); } } } }
@Override protected void cacheWriteBeforePut(EntryEventImpl event, Set netWriteRecipients, CacheWriter localWriter, boolean requireOldValue, Object expectedOldValue) throws CacheWriterException, TimeoutException { boolean origRemoteState = false; try { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { origRemoteState=event.isOriginRemote(); event.setOriginRemote(true); } event.setRegion(this.partitionedRegion); this.partitionedRegion.cacheWriteBeforePut(event, netWriteRecipients, localWriter, requireOldValue, expectedOldValue); } finally { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { event.setOriginRemote(origRemoteState); } event.setRegion(this); } }
@Override boolean cacheWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) throws CacheWriterException, EntryNotFoundException, TimeoutException { boolean origRemoteState = false; boolean ret = false; try { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { origRemoteState=event.isOriginRemote(); event.setOriginRemote(true); } event.setRegion(this.partitionedRegion); ret = this.partitionedRegion.cacheWriteBeforeDestroy(event, expectedOldValue); } finally { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { event.setOriginRemote(origRemoteState); } event.setRegion(this); } return ret; // return super.cacheWriteBeforeDestroy(event); }
public void updateEntryVersionLocally(Integer bucketId, EntryEventImpl event) throws ForceReattemptException { if (logger.isDebugEnabled()) { logger.debug("updateEntryVersionLocally: bucketId={}{}{} for key={}", this.partitionedRegion.getPRId(), PartitionedRegion.BUCKET_ID_SEPARATOR, bucketId, event.getKey()); } final BucketRegion bucketRegion = getInitializedBucketForId(event.getKey(), bucketId); try { event.setRegion(bucketRegion); bucketRegion.basicUpdateEntryVersion(event); // bug 34361: don't send a reply if bucket was destroyed during the op bucketRegion.checkReadiness(); } catch(RegionDestroyedException rde){ checkRegionDestroyedOnBucket(bucketRegion, event.isOriginRemote(), rde); } } }
@Override protected void cacheWriteBeforePut(EntryEventImpl event, Set netWriteRecipients, CacheWriter localWriter, boolean requireOldValue, Object expectedOldValue) throws CacheWriterException, TimeoutException { boolean origRemoteState = false; try { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { origRemoteState=event.isOriginRemote(); event.setOriginRemote(true); } event.setRegion(this.partitionedRegion); this.partitionedRegion.cacheWriteBeforePut(event, netWriteRecipients, localWriter, requireOldValue, expectedOldValue); } finally { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { event.setOriginRemote(origRemoteState); } event.setRegion(this); } }
@Override boolean cacheWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) throws CacheWriterException, EntryNotFoundException, TimeoutException { boolean origRemoteState = false; boolean ret = false; try { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { origRemoteState=event.isOriginRemote(); event.setOriginRemote(true); } event.setRegion(this.partitionedRegion); ret = this.partitionedRegion.cacheWriteBeforeDestroy(event, expectedOldValue); } finally { if (event.getPartitionMessage() != null || event.hasClientOrigin()) { event.setOriginRemote(origRemoteState); } event.setRegion(this); } return ret; // return super.cacheWriteBeforeDestroy(event); }
EntryEventImpl createEventForPR(EntryEventImpl sourceEvent) { EntryEventImpl e2 = new EntryEventImpl(sourceEvent); boolean returned = false; try { e2.setRegion(this.partitionedRegion); if (FORCE_LOCAL_LISTENERS_INVOCATION) { e2.setInvokePRCallbacks(true); } else { e2.setInvokePRCallbacks(sourceEvent.getInvokePRCallbacks()); } DistributedMember dm = this.getDistributionManager().getDistributionManagerId(); e2.setOriginRemote(!e2.getDistributedMember().equals(dm)); returned = true; return e2; } finally { if (!returned) { e2.release(); } } }
EntryEventImpl createEventForPR(EntryEventImpl sourceEvent) { EntryEventImpl e2 = new EntryEventImpl(sourceEvent); boolean returned = false; try { e2.setRegion(this.partitionedRegion); if (FORCE_LOCAL_LISTENERS_INVOCATION) { e2.setInvokePRCallbacks(true); } else { e2.setInvokePRCallbacks(sourceEvent.getInvokePRCallbacks()); } DistributedMember dm = this.getDistributionManager().getDistributionManagerId(); e2.setOriginRemote(!e2.getDistributedMember().equals(dm)); returned = true; return e2; } finally { if (!returned) { e2.release(); } } }
public void updateEntryVersionLocally(Integer bucketId, EntryEventImpl event) throws ForceReattemptException { if (this.logger.fineEnabled()) { this.logger.fine("updateEntryVersionLocally: bucketId=" + this.partitionedRegion.bucketStringForLogs(bucketId.intValue()) + " for key=" + event.getKey()); } final BucketRegion bucketRegion = getInitializedBucketForId(event.getKey(), bucketId); try { event.setRegion(bucketRegion); bucketRegion.basicUpdateEntryVersion(event); // bug 34361: don't send a reply if bucket was destroyed during the op bucketRegion.checkReadiness(); } catch(RegionDestroyedException rde){ checkRegionDestroyedOnBucket(bucketRegion, event.isOriginRemote(), rde); } } }
private EntryEventImpl createNewEvent(LocalRegion region, VersionTag tag, Object key) { EntryEventImpl updateTimeStampEvent = EntryEventImpl.createVersionTagHolder(tag); updateTimeStampEvent.setOperation(Operation.UPDATE_VERSION_STAMP); updateTimeStampEvent.setRegion(region); if (region instanceof PartitionedRegion) { updateTimeStampEvent.setKeyInfo(((PartitionedRegion)region).getKeyInfo(key)); } else { updateTimeStampEvent.setKeyInfo(new KeyInfo(key, null, 0)); } updateTimeStampEvent.setGenerateCallbacks(false); updateTimeStampEvent.distributedMember = region.getSystem().getDistributedMember(); updateTimeStampEvent.setNewEventId(region.getSystem()); return updateTimeStampEvent; }
public void run() { Region myRegion = getCache().getRegion(regionName); EntryEventImpl event = ((LocalRegion)myRegion).generateEvictDestroyEvent(key10); event.setOperation(Operation.LOCAL_DESTROY); if (usePR) { BucketRegion bucket = ((PartitionedRegion)myRegion).getBucketRegion(key10); if (bucket != null) { event.setRegion(bucket); getLogWriter().info("performing local destroy in " + bucket + " ccEnabled="+bucket.concurrencyChecksEnabled + " rvv="+bucket.getVersionVector()); bucket.concurrencyChecksEnabled = false; // turn off cc so entry is removed bucket.mapDestroy(event, false, false, null); bucket.concurrencyChecksEnabled = true; } } else { ((LocalRegion)myRegion).concurrencyChecksEnabled = false; // turn off cc so entry is removed ((LocalRegion)myRegion).mapDestroy(event, false, false, null); ((LocalRegion)myRegion).concurrencyChecksEnabled = true; } } };
/** create a new EntryEvent to be used in notifying listeners, bridge servers, etc. */ EntryEventImpl createListenerEvent(EntryEventImpl sourceEvent, PartitionedRegion r, InternalDistributedMember member) { final EntryEventImpl e2; if (this.notificationOnly && this.bridgeContext == null) { e2 = sourceEvent; } else { e2 = new EntryEventImpl(sourceEvent); if (this.bridgeContext != null) { e2.setContext(this.bridgeContext); } } e2.setRegion(r); e2.setOriginRemote(true); e2.setInvokePRCallbacks(!notificationOnly); if (this.filterInfo != null) { e2.setLocalFilterInfo(this.filterInfo.getFilterInfo(member)); } if (this.versionTag != null) { this.versionTag.replaceNullIDs(getSender()); e2.setVersionTag(this.versionTag); } return e2; }
private EntryEventImpl createNewEvent(LocalRegion region, VersionTag tag, Object key, Object value) { EntryEventImpl updateEvent = EntryEventImpl.createVersionTagHolder(tag); updateEvent.setOperation(Operation.UPDATE); updateEvent.setRegion(region); if (region instanceof PartitionedRegion) { updateEvent.setKeyInfo(((PartitionedRegion)region).getKeyInfo(key)); } else { updateEvent.setKeyInfo(new KeyInfo(key, value, null)); } updateEvent.setNewValue(value); updateEvent.setGenerateCallbacks(true); updateEvent.distributedMember = region.getSystem().getDistributedMember(); updateEvent.setNewEventId(region.getSystem()); return updateEvent; }
/** create a new EntryEvent to be used in notifying listeners, bridge servers, etc. */ EntryEventImpl createListenerEvent(EntryEventImpl sourceEvent, PartitionedRegion r, InternalDistributedMember member) { final EntryEventImpl e2; if (this.notificationOnly && this.bridgeContext == null) { e2 = sourceEvent; } else { e2 = new EntryEventImpl(sourceEvent); if (this.bridgeContext != null) { e2.setContext(this.bridgeContext); } } e2.setRegion(r); e2.setOldValue(this.expectedOldValue); e2.setOriginRemote(true); e2.setInvokePRCallbacks(!notificationOnly); if (this.filterInfo != null) { e2.setLocalFilterInfo(this.filterInfo.getFilterInfo(member)); } if (this.versionTag != null) { this.versionTag.replaceNullIDs(getSender()); e2.setVersionTag(this.versionTag); } return e2; }
/** create a new EntryEvent to be used in notifying listeners, bridge servers, etc. */ EntryEventImpl createListenerEvent(EntryEventImpl sourceEvent, PartitionedRegion r, InternalDistributedMember member) { final EntryEventImpl e2; if (this.notificationOnly && this.bridgeContext == null) { e2 = sourceEvent; } else { e2 = new EntryEventImpl(sourceEvent); if (this.bridgeContext != null) { e2.setContext(this.bridgeContext); } } e2.setRegion(r); e2.setOriginRemote(true); e2.setInvokePRCallbacks(!notificationOnly); if(!sourceEvent.hasOldValue()) { e2.oldValueNotAvailable(); } if (this.filterInfo != null) { e2.setLocalFilterInfo(this.filterInfo.getFilterInfo(member)); } if (this.versionTag != null) { this.versionTag.replaceNullIDs(getSender()); e2.setVersionTag(this.versionTag); } return e2; }
private void destroyAllEntries(Set keysToDestroy, long batchKey) { for(Object key : keysToDestroy) { if (getCache().getLoggerI18n().fineEnabled()) { getCache() .getLoggerI18n() .fine("Destroying the entries after creating ColumnBatch " + key + " batchid " + batchKey + " total size " + this.size() + " keysToDestroy size " + keysToDestroy.size()); } EntryEventImpl event = EntryEventImpl.create( getPartitionedRegion(), Operation.DESTROY, null, null, null, false, this.getMyId()); event.setKey(key); event.setBucketId(this.getId()); TXStateInterface txState = event.getTXState(this); if (txState != null) { event.setRegion(this); txState.destroyExistingEntry(event, true, null); } else { this.getPartitionedRegion().basicDestroy(event,true,null); } } if (getCache().getLoggerI18n().fineEnabled()) { getCache() .getLoggerI18n() .fine("Destroyed all for batchID " + batchKey + " total size " + this.size()); } }