private void givenEventWithClientOrigin() { when(event.getContext()).thenReturn(mock(ClientProxyMembershipID.class)); when(event.isBridgeEvent()).thenReturn(true); when(event.hasClientOrigin()).thenReturn(true); if (event.getVersionTag() != null) { when(event.isFromBridgeAndVersioned()).thenReturn(true); } }
@Override protected CacheOperationMessage createMessage() { EntryEventImpl ev = getEvent(); if (ev.isBridgeEvent()) { UpdateWithContextMessage mssgwithContxt = new UpdateWithContextMessage(); // getContext is not in EntryEvent interface because it exposes a private // class mssgwithContxt.clientID = ev.getContext(); return mssgwithContxt; } else { return new UpdateMessage(); } }
@Override public void postRemoveAllFireEvents(DistributedRemoveAllOperation removeAllOp, VersionedObjectList successfulOps) { if (!this.getDataPolicy().withStorage() && this.getConcurrencyChecksEnabled() && removeAllOp.getBaseEvent().isBridgeEvent()) { // if there is no local storage we need to transfer version information // to the successfulOps list for transmission back to the client successfulOps.clear(); removeAllOp.fillVersionedObjectList(successfulOps); } Set successfulKeys = new HashSet(successfulOps.size()); for (Object key : successfulOps.getKeys()) { successfulKeys.add(key); } for (Iterator it = removeAllOp.eventIterator(); it.hasNext();) { @Unretained EntryEventImpl event = (EntryEventImpl) it.next(); if (successfulKeys.contains(event.getKey())) { invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), this.isUsedForPartitionedRegionBucket /* * If this is replicated region, use "false". We must notify gateways inside RegionEntry * lock, NOT here, to preserve the order of events sent by gateways for same key. If this is * bucket region, use "true", because the event order is guaranteed */); } } }
@Override public void postPutAllFireEvents(DistributedPutAllOperation putAllOp, VersionedObjectList successfulPuts) { if (!this.getDataPolicy().withStorage() && this.getConcurrencyChecksEnabled() && putAllOp.getBaseEvent().isBridgeEvent()) { // if there is no local storage we need to transfer version information // to the successfulPuts list for transmission back to the client successfulPuts.clear(); putAllOp.fillVersionedObjectList(successfulPuts); } Set successfulKeys = new HashSet(successfulPuts.size()); for (Object key : successfulPuts.getKeys()) { successfulKeys.add(key); } for (Iterator it = putAllOp.eventIterator(); it.hasNext();) { @Unretained EntryEventImpl event = (EntryEventImpl) it.next(); if (successfulKeys.contains(event.getKey())) { EnumListenerEvent op = event.getOperation().isCreate() ? EnumListenerEvent.AFTER_CREATE : EnumListenerEvent.AFTER_UPDATE; invokePutCallbacks(op, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), this.isUsedForPartitionedRegionBucket /* * If this is replicated region, use "false". We must notify gateways inside RegionEntry * lock, NOT here, to preserve the order of events sent by gateways for same key. If this is * bucket region, use "true", because the event order is guaranteed */); } } }
private void checkTombstoneAndConcurrency() { if (regionEntry == null) { // we need to create an entry if in token mode or if we've received // a destroy from a peer or WAN gateway and we need to retain version // information for concurrency checks retainForConcurrency = (!haveTombstone && (internalRegion.getDataPolicy().withReplication() || event.isFromServer()) && internalRegion.getConcurrencyChecksEnabled() && (event.isOriginRemote() /* destroy received from other must create tombstone */ || event.isFromWANAndVersioned() /* wan event must create a tombstone */ || event.isBridgeEvent())); /* * event from client must create a tombstone so client has * a version # */ if (!inTokenMode && !retainForConcurrency) { retryRemoveWithTombstone(); } } }
@Override public void postPutAll(DistributedPutAllOperation putallOp, VersionedObjectList successfulPuts, InternalRegion reg) { if (!reg.getDataPolicy().withStorage() && reg.getConcurrencyChecksEnabled() && putallOp.getBaseEvent().isBridgeEvent()) { // if there is no local storage we need to transfer version information // to the successfulPuts list for transmission back to the client successfulPuts.clear(); putallOp.fillVersionedObjectList(successfulPuts); } // BR & DR's putAll long token = -1; try { token = reg.postPutAllSend(putallOp, successfulPuts); reg.postPutAllFireEvents(putallOp, successfulPuts); } finally { if (token != -1 && reg instanceof DistributedRegion) { putallOp.endOperation(token); } } }
if (event.isBridgeEvent() && bucketStorageAssigned) { setNetworkHopType(bucketId, targetNode);
@Override public void postRemoveAll(DistributedRemoveAllOperation op, VersionedObjectList successfulOps, InternalRegion reg) { if (!reg.getDataPolicy().withStorage() && reg.getConcurrencyChecksEnabled() && op.getBaseEvent().isBridgeEvent()) { // if there is no local storage we need to transfer version information // to the successfulOps list for transmission back to the client successfulOps.clear(); op.fillVersionedObjectList(successfulOps); } // BR, DR's removeAll long token = -1; try { token = reg.postRemoveAllSend(op, successfulOps); reg.postRemoveAllFireEvents(op, successfulOps); } finally { if (token != -1 && reg instanceof DistributedRegion) { op.endOperation(token); } } } }
this.dataStore.destroyLocally(bucketId, event, expectedOldValue); } else { if (event.isBridgeEvent()) { setNetworkHopType(bucketId, currentTarget);
delta = entryEvent.getDeltaBytes(); callbackArgument = entryEvent.getRawCallbackArgument(); if (entryEvent.isBridgeEvent()) { membershipID = entryEvent.getContext();
@Retained protected static EntryEventImpl createRemoveAllEvent(DistributedRemoveAllOperation op, InternalRegion region, Object entryKey) { @Retained EntryEventImpl e; final Operation entryOp = Operation.REMOVEALL_DESTROY; if (op != null) { EntryEventImpl event = op.getBaseEvent(); if (event.isBridgeEvent()) { e = EntryEventImpl.create(region, entryOp, entryKey, null, event.getRawCallbackArgument(), false, event.distributedMember, event.isGenerateCallbacks()); e.setContext(event.getContext()); } else { e = EntryEventImpl.create(region, entryOp, entryKey, null, event.getCallbackArgument(), false, region.getMyId(), event.isGenerateCallbacks()); } } else { e = EntryEventImpl.create(region, entryOp, entryKey, null, null, false, region.getMyId(), true); } e.removeAllOp = op; return e; }
/** * Creates a PutAllEvent given the distributed operation, the region, and the entry data. * * @since GemFire 5.0 */ @Retained static EntryEventImpl createPutAllEvent(DistributedPutAllOperation putAllOp, InternalRegion region, Operation entryOp, Object entryKey, @Retained(ENTRY_EVENT_NEW_VALUE) Object entryNewValue) { @Retained EntryEventImpl e; if (putAllOp != null) { EntryEventImpl event = putAllOp.getBaseEvent(); if (event.isBridgeEvent()) { e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, event.getRawCallbackArgument(), false, event.distributedMember, event.isGenerateCallbacks()); e.setContext(event.getContext()); } else { e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, event.getCallbackArgument(), false, region.getMyId(), event.isGenerateCallbacks()); } } else { e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, null, false, region.getMyId(), true); } e.putAllOp = putAllOp; return e; }