/** * create a new entry event that will be used for conveying version information * and anything else of use while processing another event * @return the empty event object */ @Retained public static EntryEventImpl createVersionTagHolder(VersionTag tag) { EntryEventImpl result = new EntryEventImpl(); result.setVersionTag(tag); return result; }
/** * create a new entry event that will be used for conveying version information * and anything else of use while processing another event * @return the empty event object */ @Retained public static EntryEventImpl createVersionTagHolder(VersionTag tag) { EntryEventImpl result = new EntryEventImpl(); result.setVersionTag(tag); result.disallowOffHeapValues(); return result; }
protected final void waitForRemoteInvalidate( final InvalidateResponse response, final Object recipients, final EntryEventImpl event) throws EntryNotFoundException, PrimaryBucketException, ForceReattemptException { try { response.waitForResult(); event.setVersionTag(response.versionTag); } catch (EntryNotFoundException enfe) { throw enfe; } catch (TransactionException te) { throw te; } catch (CacheException ce) { throw new PartitionedRegionException( LocalizedStrings.PartitionedRegion_INVALIDATION_OF_ENTRY_ON_0_FAILED .toLocalizedString(recipients), ce); } }
@Override protected Object processResponse(Message msg, Connection con) throws Exception { processAck(msg, "invalidate"); boolean isReply = (msg.getMessageType() == MessageType.REPLY); int partIdx = 0; int flags = 0; if (isReply) { flags = msg.getPart(partIdx++).getInt(); if ((flags & HAS_VERSION_TAG) != 0) { VersionTag tag = (VersionTag)msg.getPart(partIdx++).getObject(); // we use the client's ID since we apparently don't track the server's ID in connections tag.replaceNullIDs((InternalDistributedMember) con.getEndpoint().getMemberId()); this.event.setVersionTag(tag); if (logger.isDebugEnabled()) { logger.debug("received Invalidate response with {}", tag); } } else { if (logger.isDebugEnabled()) { logger.debug("received Invalidate response"); } } } return null; } @Override
public void basicBridgeUpdateVersionStamp(Object key, Object p_callbackArg, ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) { // Create an event and update version stamp of the entry EntryEventImpl event = EntryEventImpl.create(this, Operation.UPDATE_VERSION_STAMP, key, null /* new value */, null /*callbackArg*/, false /* origin remote */, memberId.getDistributedMember(), false /* generateCallbacks */, clientEvent.getEventId()); event.setContext(memberId); // if this is a replayed operation we may already have a version tag event.setVersionTag(clientEvent.getVersionTag()); try { basicUpdateEntryVersion(event); } finally { clientEvent.setVersionTag(event.getVersionTag()); clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); event.release(); } }
public void basicBridgeUpdateVersionStamp(Object key, Object p_callbackArg, ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) { // Create an event and update version stamp of the entry EntryEventImpl event = EntryEventImpl.create(this, Operation.UPDATE_VERSION_STAMP, key, null /* new value */, null /*callbackArg*/, false /* origin remote */, memberId.getDistributedMember(), false /* generateCallbacks */, clientEvent.getEventId()); event.setContext(memberId); // if this is a replayed operation we may already have a version tag event.setVersionTag(clientEvent.getVersionTag()); try { basicUpdateEntryVersion(event); } finally { clientEvent.setVersionTag(event.getVersionTag()); clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); event.release(); } }
@Override void basicInvalidatePart2(final RegionEntry re, final EntryEventImpl event, boolean clearConflict, boolean invokeCallbacks) { // Assumed this is called with the entry synchronized if (!event.isOriginRemote()) { if (event.getVersionTag() == null || event.getVersionTag().isGatewayTag()) { VersionTag v = re.generateVersionTag(null, false, this, event); if (logger.isDebugEnabled() && v != null) { logger.debug("generated version tag {} in region {}", v, this.getName()); } event.setVersionTag(v); } // This code assumes it is safe ignore token mode (GII in progress) // because it assumes when the origin of the event is local, // the GII has completed and the region is initialized and open for local // ops // This code assumes that this bucket is primary // distribute op to bucket secondaries and event to other listeners InvalidateOperation op = new InvalidateOperation(event); op.distribute(); } super.basicInvalidatePart2(re, event, clearConflict /*Clear conflict occurred */, invokeCallbacks); }
@Override protected InternalCacheEvent createEvent(DistributedRegion rgn) throws EntryNotFoundException { if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl ev = EntryEventImpl.create(rgn, getOperation(), this.key, null /* newValue */, this.callbackArg /*callbackArg*/, true /* originRemote*/ , getSender(), false /*generateCallbacks*/); ev.setEventId(this.eventId); ev.setVersionTag(this.versionTag); ev.setTailKey(this.tailKey); return ev; }
@Override protected InternalCacheEvent createEvent(DistributedRegion rgn) throws EntryNotFoundException { if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl ev = EntryEventImpl.create(rgn, getOperation(), this.key, null /* newValue */, this.callbackArg /*callbackArg*/, true /* originRemote*/ , getSender(), false /*generateCallbacks*/); ev.setEventId(this.eventId); ev.setVersionTag(this.versionTag); ev.setTailKey(this.tailKey); return ev; }
protected EntryEventImpl createEntryEvent(DistributedRegion rgn) { Object argNewValue = null; final boolean originRemote = true, generateCallbacks = true; if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl result = EntryEventImpl.create(rgn, getOperation(), this.key, argNewValue, // oldValue, this.callbackArg, originRemote, getSender(), generateCallbacks); setOldValueInEvent(result); result.setTailKey(this.tailKey); if (this.versionTag != null) { result.setVersionTag(this.versionTag); } return result; }
protected final void waitForRemoteDestroy(final DestroyResponse response, final Object recipients, final EntryEventImpl event) throws EntryNotFoundException, PrimaryBucketException, ForceReattemptException { try { response.waitForCacheException(); event.setVersionTag(response.getVersionTag()); } catch (EntryNotFoundException enfe) { throw enfe; } catch (TransactionException te) { throw te; } catch (CacheException ce) { throw new PartitionedRegionException( LocalizedStrings.PartitionedRegion_DESTROY_OF_ENTRY_ON_0_FAILED .toLocalizedString(recipients), ce); } catch (RegionDestroyedException rde) { throw new RegionDestroyedException(toString(), getFullPath()); } }
@Override public Object call() { DistributedRegion dr = (DistributedRegion)getCache().getRegion("region"); VersionTag tag = new VMVersionTag(); tag.setMemberID(dr.getVersionMember()); tag.setRegionVersion(123); tag.setEntryVersion(9); tag.setVersionTimeStamp(System.currentTimeMillis()); EventID eventID = new EventID(new byte[0], 1, 0); EntryEventImpl event = EntryEventImpl.create(dr, Operation.CREATE, "TestObject", "TestValue", null, false, memberID, true, eventID); event.setVersionTag(tag); event.setContext(new ClientProxyMembershipID(memberID)); dr.recordEvent(event); event.release(); return memberID; } });
protected EntryEventImpl createEntryEvent(DistributedRegion rgn) { Object argNewValue = null; final boolean originRemote = true, generateCallbacks = true; if (rgn.keyRequiresRegionContext()) { final KeyWithRegionContext key = (KeyWithRegionContext)this.key; if (this.newValue != null) { key.afterDeserializationWithValue(this.newValue); } else if (!(this.newValueObj instanceof com.gemstone.gemfire.internal .cache.delta.Delta)) { key.afterDeserializationWithValue(this.newValueObj); } key.setRegionContext(rgn); } EntryEventImpl result = EntryEventImpl.create(rgn, getOperation(), this.key, argNewValue, // oldValue, this.callbackArg, originRemote, getSender(), generateCallbacks); setOldValueInEvent(result); result.setTailKey(this.tailKey); if (this.versionTag != null) { result.setVersionTag(this.versionTag); } return result; }
/** 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; }
@Override protected InternalCacheEvent createEvent(DistributedRegion rgn) throws EntryNotFoundException { if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl ev = EntryEventImpl.create( rgn, getOperation(), this.key, null, this.callbackArg, true, getSender()); ev.setEventId(this.eventId); setOldValueInEvent(ev); ev.setVersionTag(this.versionTag); if (this.filterRouting != null) { ev.setLocalFilterInfo(this.filterRouting .getFilterInfo(rgn.getMyId())); } ev.setInhibitAllNotifications(this.inhibitAllNotifications); return ev; }
@Override protected InternalCacheEvent createEvent(DistributedRegion rgn) throws EntryNotFoundException { if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl ev = EntryEventImpl.create( rgn, getOperation(), this.key, null, this.callbackArg, true, getSender()); ev.setEventId(this.eventId); setOldValueInEvent(ev); ev.setVersionTag(this.versionTag); if (this.filterRouting != null) { ev.setLocalFilterInfo(this.filterRouting .getFilterInfo(rgn.getMyId())); } ev.setInhibitAllNotifications(this.inhibitAllNotifications); return ev; }
@Override protected final InternalCacheEvent createEvent(DistributedRegion rgn) throws EntryNotFoundException { if (rgn.keyRequiresRegionContext()) { ((KeyWithRegionContext)this.key).setRegionContext(rgn); } EntryEventImpl ev = createEntryEvent(rgn); boolean evReturned = false; try { ev.setEventId(this.eventId); ev.setOldValueFromRegion(); ev.setVersionTag(this.versionTag); if (this.filterRouting != null) { ev.setLocalFilterInfo(this.filterRouting .getFilterInfo(rgn.getMyId())); } ev.setTailKey(tailKey); ev.setInhibitAllNotifications(this.inhibitAllNotifications); evReturned = true; return ev; } finally { if (!evReturned) { ev.release(); } } }
/** 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; }
@Override void basicInvalidatePart2(final RegionEntry re, final EntryEventImpl event, boolean clearConflict, boolean invokeCallbacks) { // Assumed this is called with the entry synchronized if (!event.isOriginRemote()) { if (event.getVersionTag() == null || event.getVersionTag().isGatewayTag()) { LogWriterI18n log = getCache().getLoggerI18n(); VersionTag v = re.generateVersionTag(null, false, false, this, event); if (log.fineEnabled() && v != null) { log.fine("generated version tag " + v + /*" for " + event.getKey() +*/ " in region " + this.getName()); } event.setVersionTag(v); } // This code assumes it is safe ignore token mode (GII in progress) // because it assumes when the origin of the event is local, // the GII has completed and the region is initialized and open for local // ops // This code assumes that this bucket is primary // distribute op to bucket secondaries and event to other listeners InvalidateOperation op = new InvalidateOperation(event); op.distribute(); } super.basicInvalidatePart2(re, event, clearConflict /*Clear conflict occurred */, invokeCallbacks); }
@Override protected Object processResponse(Message msg, Connection con) throws Exception { processAck(msg, "invalidate"); LogWriterI18n log = InternalDistributedSystem.getLoggerI18n(); boolean isReply = (msg.getMessageType() == MessageType.REPLY); int partIdx = 0; int flags = 0; if (isReply) { flags = msg.getPart(partIdx++).getInt(); if ((flags & HAS_VERSION_TAG) != 0) { VersionTag tag = (VersionTag)msg.getPart(partIdx++).getObject(); // we use the client's ID since we apparently don't track the server's ID in connections tag.replaceNullIDs((InternalDistributedMember) con.getEndpoint().getMemberId()); this.event.setVersionTag(tag); if (log.fineEnabled()) { log.fine("received Invalidate response with " + tag); } } else if (log.fineEnabled()) { log.fine("received Invalidate response"); } } return null; } @Override