@Test public void initialImagePut_givenPutIfAbsentReturnsNullAndProcessVersionTagThrowsConcurrentCacheModificationException_createdEntryRemovedFromMapAndNotInitialImageInit() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); when(map.putIfAbsent(eq(KEY), any())).thenReturn(null); RegionEntryFactory factory = mock(RegionEntryFactory.class); VersionStamp mockVersionStamp = mock(VersionStamp.class); doThrow(new ConcurrentCacheModificationException()).when(mockVersionStamp) .processVersionTag(any(), any(), anyBoolean(), anyBoolean(), any(), any(), anyBoolean()); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(mockVersionStamp); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); final TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(map, times(1)).remove(eq(KEY), eq(createdEntry)); verify(createdEntry, never()).initialImageInit(any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean()); }
region.getCachePerfStats().incConflatedEventsCount(); persistConflictingTag(region, tag); throw new ConcurrentCacheModificationException();
@Test public void initialImagePut_givenPutIfAbsentReturningRegionEntryAndProcessVersionTagThrowsConcurrentCacheModificationException_createdEntryRemovedFromMapAndNotInitialImageInit() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isTombstone()).thenReturn(false); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(versionStamp.asVersionTag()).thenReturn(mock(VersionTag.class)); doThrow(new ConcurrentCacheModificationException()).when(versionStamp).processVersionTag(any(), any(), anyBoolean(), anyBoolean(), any(), any(), anyBoolean()); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(versionStamp); RegionEntryFactory factory = mock(RegionEntryFactory.class); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); when(map.putIfAbsent(eq(KEY), any())).thenReturn(entry); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(map, times(1)).remove(eq(KEY), eq(createdEntry)); verify(entry, never()).initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean()); }
return true; } else { throw new ConcurrentCacheModificationException("conflicting WAN event detected"); logger.debug("conflict resolver rejected the event for {}", event.getKey()); throw new ConcurrentCacheModificationException( "WAN conflict resolver rejected the operation"); logger.debug("disallowing event for {}", event.getKey()); throw new ConcurrentCacheModificationException("conflicting WAN event detected");
@Test public void testClientEventIsUpdatedWithCurrentEntryVersionTagAfterSearchConcurrencyException() { DistributedRegion region = prepare(true); EntryEventImpl event = createDummyEvent(region); region.basicInvalidate(event); VersionTag tag = createVersionTag(true); RegionEntry re = mock(RegionEntry.class); VersionStamp stamp = mock(VersionStamp.class); doReturn(re).when(region).getRegionEntry(any()); when(re.getVersionStamp()).thenReturn(stamp); when(stamp.asVersionTag()).thenReturn(tag); createSearchLoad(); doThrow(new ConcurrentCacheModificationException()).when(region) .basicPutEntry(any(EntryEventImpl.class), anyLong()); KeyInfo ki = new KeyInfo(event.getKey(), null, null); region.findObjectInSystem(ki, false, null, false, null, false, false, null, event, false); assertNotNull("ClientEvent version tag is not set with region version tag.", event.getVersionTag()); }
if (event.isConcurrencyConflict()) { throw new ConcurrentCacheModificationException();
throw new ConcurrentCacheModificationException("conflicting event detected");
if (event.isConcurrencyConflict()) { throw new ConcurrentCacheModificationException();