@Override public boolean destroy(EntryEventImpl event, boolean inTokenMode, boolean duringRI, boolean cacheWrite, boolean isEviction, Object expectedOldValue, boolean removeRecoveredEntry) throws CacheWriterException, EntryNotFoundException, TimeoutException { RegionMapDestroy regionMapDestroy = new RegionMapDestroy((InternalRegion) owner, this, this); return regionMapDestroy.destroy(event, inTokenMode, duringRI, cacheWrite, isEviction, expectedOldValue, removeRecoveredEntry); }
invokeTestHookForConcurrentOperation(); checkTombstoneAndConcurrency(); if (inTokenMode || retainForConcurrency) { handleMissingRegionEntry(); handleExistingRegionEntry(); triggerDistributionAndListenerNotification(); } finally { cancelExpiryTaskIfRegionEntryExisted();
retryIfIsRemovedPhase2(); if (doContinue) { return; abortLocalExpirationIfEntryIsInUseByTransaction(); if (abortDestroyAndReturnFalse) { return; confirmEvictionDestroy(); if (abortDestroyAndReturnFalse) { return; destroyExistingEntry(); updateVersionTagOnEntryWithTombstone(); if (expectedOldValue != null) { abortDestroyAndReturnFalse = true;
oldRegionEntry = focusedRegionMap.putEntryIfAbsent(event.getKey(), newRegionEntry); removeRegionEntryUntilCompleted(); if (abortDestroyAndReturnFalse) { return; return; destroyEntryInternal(newRegionEntry, oldRegionEntry); } catch (RegionClearedException rce) { handleRegionClearedExceptionDuringDestroyEntryInternal(newRegionEntry);
private void doDestroy() { doDestroyResult = regionMapDestroy.destroy(event, inTokenMode, duringRI, cacheWrite, isEviction, expectedOldValue, removeRecoveredEntry); }
removeRecoveredEntry = false; regionMapDestroy = new RegionMapDestroy(owner, regionMap, mock(CacheModificationLock.class));
private void destroyEntryInternal(RegionEntry newRegionEntry, RegionEntry oldRegionEntry) throws RegionClearedException { opCompleted = destroyEntry(newRegionEntry, event, inTokenMode, cacheWrite, expectedOldValue, true, removeRecoveredEntry); if (opCompleted) { // This is a new entry that was created because we are in // token mode or are accepting a destroy operation by adding // a tombstone. There is no oldValue, so we don't need to // call updateSizeOnRemove // internalRegion.recordEvent(event); event.setIsRedestroyedEntry(true); // native clients need to know if the // entry didn't exist if (retainForConcurrency) { internalRegion.basicDestroyBeforeRemoval(oldRegionEntry, event); } internalRegion.basicDestroyPart2(newRegionEntry, event, inTokenMode, false, duringRI, true); doPart3 = true; } }
Assert.assertTrue(event.getVersionTag() == null); Assert.assertTrue(newRegionEntry == tombstone); event.setVersionTag(getVersionTagFromStamp(tombstone.getVersionStamp()));
boolean destroyed = destroyEntry(oldRegionEntry, event, inTokenMode, cacheWrite, expectedOldValue, false, removeRecoveredEntry); if (destroyed) {
@Test public void destroyDoesNotLockGIIClearLockWhenRegionIsInitialized() throws Exception { DistributedRegion region = mock(DistributedRegion.class, RETURNS_DEEP_STUBS); when(region.isInitialized()).thenReturn(true); when(region.lockWhenRegionIsInitializing()).thenCallRealMethod(); RegionMapDestroy mapDestroy = new RegionMapDestroy(region, regionMap, mock(CacheModificationLock.class)); mapDestroy.destroy(event, inTokenMode, duringRI, cacheWrite, isEviction, expectedOldValue, removeRecoveredEntry); verify(region).lockWhenRegionIsInitializing(); assertThat(region.lockWhenRegionIsInitializing()).isFalse(); verify(region, never()).unlockWhenRegionIsInitializing(); }
private void destroyExistingEntry() { boolean removed = false; try { opCompleted = destroyEntry(regionEntry, event, inTokenMode, cacheWrite, expectedOldValue, false, removeRecoveredEntry); if (opCompleted) {
@Test public void destroyLockGIIClearLockWhenRegionIsInitializing() throws Exception { DistributedRegion region = mock(DistributedRegion.class, RETURNS_DEEP_STUBS); when(region.isInitialized()).thenReturn(false); when(region.lockWhenRegionIsInitializing()).thenCallRealMethod(); RegionMapDestroy mapDestroy = new RegionMapDestroy(region, regionMap, mock(CacheModificationLock.class)); mapDestroy.destroy(event, inTokenMode, duringRI, cacheWrite, isEviction, expectedOldValue, removeRecoveredEntry); verify(region).lockWhenRegionIsInitializing(); assertThat(region.lockWhenRegionIsInitializing()).isTrue(); verify(region).unlockWhenRegionIsInitializing(); }