@Override public void localDestroyRegion(Object aCallbackArgument) { getDataView().checkSupportsRegionDestroy(); String prName = this.getColocatedWith(); List<PartitionedRegion> listOfChildRegions = ColocationHelper.getColocatedChildRegions(this); List<String> childRegionsWithoutSendersList = new ArrayList<String>(); if (listOfChildRegions.size() != 0) { for (PartitionedRegion childRegion : listOfChildRegions) { if (!childRegion.getName().contains(ParallelGatewaySenderQueue.QSTRING)) { childRegionsWithoutSendersList.add(childRegion.getFullPath()); } } } if ((prName != null) || (!childRegionsWithoutSendersList.isEmpty())) { throw new UnsupportedOperationException( "Any Region in colocation chain cannot be destroyed locally."); } RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_LOCAL_DESTROY, aCallbackArgument, false, getMyId(), generateEventID()/* generate EventID */); try { basicDestroyRegion(event, false); } catch (CacheWriterException e) { // not possible with local operation, CacheWriter not called throw new Error("CacheWriterException should not be thrown in localDestroyRegion", e); } catch (TimeoutException e) { // not possible with local operation, no distributed locks possible throw new Error("TimeoutException should not be thrown in localDestroyRegion", e); } }
@Override public void destroyRegion(Object aCallbackArgument) throws CacheWriterException, TimeoutException { this.cache.invokeBeforeDestroyed(this); checkForColocatedChildren(); getDataView().checkSupportsRegionDestroy(); checkForLimitedOrNoAccess(); RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_DESTROY, aCallbackArgument, false, getMyId(), generateEventID()); basicDestroyRegion(event, true); }
generateEventID()); } else { event = new RegionEventImpl(parallelQueueRegion, Operation.REGION_LOCAL_DESTROY, null, false, getMyId(), generateEventID());
int serials[] = getRegionAdvisor().getBucketSerials(); RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_CLOSE, null, false, getMyId(), generateEventID()/* generate EventID */); try { sendDestroyRegionMessage(event, serials);
@Test public void addsCallbackEvent_givenNoRegionEntryNotInTokenModeNoConcurrencyChecks_andBucket() { givenBucketRegion(); givenNoRegionEntry(); givenNotInTokenMode(); givenNoConcurrencyChecks(); when(partitionedRegion.generateEventID()).thenReturn(true); when(keyInfo.getCallbackArg()).thenReturn(aCallbackArgument); doTxApplyDestroy(); verify(owner, times(1)).handleWANEvent(any()); verify(txEntryState, times(1)).setTailKey(tailKey); assertThat(pendingCallbacks).hasSize(1); EntryEventImpl callbackEvent = pendingCallbacks.get(0); // noinspection Duplicates assertSoftly(softly -> { softly.assertThat(callbackEvent.getRegion()).isSameAs(partitionedRegion); softly.assertThat(callbackEvent.getOperation()).isSameAs(operation); softly.assertThat(callbackEvent.getKey()).isSameAs(key); softly.assertThat(callbackEvent.getNewValue()).isNull(); softly.assertThat(callbackEvent.getTransactionId()).isSameAs(txId); softly.assertThat(callbackEvent.getEventId()).isSameAs(eventId); softly.assertThat(callbackEvent.getCallbackArgument()).isSameAs(aCallbackArgument); softly.assertThat(callbackEvent.getLocalFilterInfo()).isSameAs(filterRoutingInfo); softly.assertThat(callbackEvent.getContext()).isSameAs(bridgeContext); softly.assertThat(callbackEvent.isOriginRemote()).isEqualTo(isOriginRemote); softly.assertThat(callbackEvent.getVersionTag()).isEqualTo(versionTag); softly.assertThat(callbackEvent.getTailKey()).isEqualTo(tailKey); }); }
@Test public void addsCallbackEvent_givenOldRegionEntryAndBucket() { givenBucketRegion(); givenConcurrencyChecks(); givenOldRegionEntry(); when(partitionedRegion.generateEventID()).thenReturn(true); when(keyInfo.getCallbackArg()).thenReturn(aCallbackArgument); doTxApplyDestroy(); EntryEventImpl callbackEvent = pendingCallbacks.get(0); // noinspection Duplicates assertSoftly(softly -> { softly.assertThat(callbackEvent.getRegion()).isSameAs(partitionedRegion); softly.assertThat(callbackEvent.getOperation()).isSameAs(operation); softly.assertThat(callbackEvent.getKey()).isSameAs(key); softly.assertThat(callbackEvent.getNewValue()).isNull(); softly.assertThat(callbackEvent.getTransactionId()).isSameAs(txId); softly.assertThat(callbackEvent.getEventId()).isSameAs(eventId); softly.assertThat(callbackEvent.getCallbackArgument()).isSameAs(aCallbackArgument); softly.assertThat(callbackEvent.getLocalFilterInfo()).isSameAs(filterRoutingInfo); softly.assertThat(callbackEvent.getContext()).isSameAs(bridgeContext); softly.assertThat(callbackEvent.isOriginRemote()).isEqualTo(isOriginRemote); softly.assertThat(callbackEvent.getVersionTag()).isEqualTo(versionTag); softly.assertThat(callbackEvent.getTailKey()).isEqualTo(tailKey); softly.assertThat(callbackEvent.getRegionEntry()).isSameAs(oldRegionEntry); softly.assertThat(callbackEvent.getOldValue()).isNull(); }); }