InternalDistributedMember getBucketNodeForReadOrWrite(int bucketId, EntryEventImpl clientEvent) { InternalDistributedMember targetNode; if (clientEvent != null && clientEvent.getOperation() != null && clientEvent.getOperation().isGetForRegisterInterest()) { targetNode = getNodeForBucketWrite(bucketId, null); } else { targetNode = getNodeForBucketReadOrLoad(bucketId); } return targetNode; }
@Override public void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) { if (event.getOperation().isLocal()) { throw new UnsupportedOperationInTransactionException(); } Object result = proxy.destroy(event.getKey(), expectedOldValue, event.getOperation(), event, event.getCallbackArgument()); if (result instanceof EntryNotFoundException) { throw (EntryNotFoundException) result; } }
protected boolean needWriteLock(EntryEventImpl event) { return !(event.isOriginRemote() || event.isNetSearch() || event.getOperation().isLocal() || event.getOperation().isPutAll() || event.getOperation().isRemoveAll() || (event.isExpiration() && isEntryEvictDestroyEnabled() || event.isPendingSecondaryExpireDestroy())); }
private void abortLocalExpirationIfEntryIsInUseByTransaction() { if (!event.isOriginRemote() && event.getOperation().isExpiration()) { // If this expiration started locally then only do it if the RE is not being // used by a tx. if (regionEntry.isInUseByTransaction()) { opCompleted = false; abortDestroyAndReturnFalse = true; } } }
@Override public void invalidateExistingEntry(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry) { if (event.getOperation().isLocal()) { throw new UnsupportedOperationInTransactionException(); } proxy.invalidate(event); }
public PRUpdateEntryVersionMessage(Set recipients, int regionId, DirectReplyProcessor processor, EntryEventImpl event) { super(recipients, regionId, processor, event); this.key = event.getKey(); this.op = event.getOperation(); this.eventId = event.getEventId(); this.versionTag = event.getVersionTag(); }
@Override public void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws EntryNotFoundException { // logger.debug("DistTXStateOnCoordinator.destroyExistingEntry", new Throwable()); super.destroyExistingEntry(event, cacheWrite, expectedOldValue); // removeAll event is already added in postRemoveAll, don't add individual // events from the removeAll operation again if (!event.getOperation().isRemoveAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } }
/** * @since GemFire 5.7 */ void serverInvalidate(EntryEventImpl event) { if (event.getOperation().isDistributed() && !event.isOriginRemote()) { ServerRegionProxy mySRP = getServerProxy(); if (mySRP != null) { mySRP.invalidate(event); } } }
@Override public void destroyOnRemote(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws DataLocationException { // logger.debug("DistTXStateOnCoordinator.destroyOnRemote", new Throwable()); super.destroyOnRemote(event, cacheWrite, expectedOldValue); // removeAll event is already added in postRemoveAll, don't add individual // events from the removeAll operation again if (!event.getOperation().isRemoveAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } }
@Test public void createOnEmptyMapAddsEntry() throws Exception { ifNew = true; when(event.getOperation()).thenReturn(Operation.CREATE); RegionEntry result = doPut(); assertThat(result).isSameAs(createdRegionEntry); verify(event, times(1)).putNewEntry(internalRegion, createdRegionEntry); verify(internalRegion, times(1)).basicPutPart2(eq(event), eq(result), eq(true), anyLong(), eq(false)); verify(internalRegion, times(1)).basicPutPart3(eq(event), eq(result), eq(true), anyLong(), eq(true), eq(ifNew), eq(ifOld), eq(expectedOldValue), eq(requireOldValue)); }
@Test public void lruEnryCreateCalled_ifCreateDoneWithoutAClear() throws Exception { ifNew = true; when(event.getOperation()).thenReturn(Operation.CREATE); doPut(); verify(focusedRegionMap, times(1)).lruEntryCreate(createdRegionEntry); }
@Test public void verifyCMENotOriginRemoteShouldNotBeAddToSecondary() throws Exception { EntryEventImpl event = mock(EntryEventImpl.class); when(event.getOperation()).thenReturn(Operation.CREATE); when(event.isConcurrencyConflict()).thenReturn(true); when(event.isOriginRemote()).thenReturn(false); this.processor = spy(processor); this.processor.enqueueEvent(null, event, null); verify(this.processor, never()).handleSecondaryEvent(any()); }
@Test public void lruUpdateCallbackNotCalled_ifPutDoneWithAClear() throws Exception { ifNew = true; when(event.getOperation()).thenReturn(Operation.CREATE); when(focusedRegionMap.disableLruUpdateCallback()).thenReturn(true); doThrow(RegionClearedException.class).when(event).putNewEntry(any(), any()); doPut(); verify(focusedRegionMap, never()).lruUpdateCallback(); }
@Test public void putInvokesNotifyTimestampsToGateways_ifCreateDoneWithConcurrentCacheModificationException() throws Exception { ifNew = true; when(event.getOperation()).thenReturn(Operation.CREATE); doThrow(ConcurrentCacheModificationException.class).when(event).putNewEntry(any(), any()); VersionTag versionTag = mock(VersionTag.class); when(versionTag.isTimeStampUpdated()).thenReturn(true); when(event.getVersionTag()).thenReturn(versionTag); assertThatThrownBy(() -> doPut()).isInstanceOf(ConcurrentCacheModificationException.class); verify(internalRegion, times(1)).notifyTimestampsToGateways(same(event)); }
@Test public void lruUpdateCallbackNotCalled_ifCallbacksNotDisabled() { ifNew = true; when(focusedRegionMap.disableLruUpdateCallback()).thenReturn(false); when(event.getOperation()).thenReturn(Operation.CREATE); doPut(); verify(focusedRegionMap, never()).lruUpdateCallback(); }
@Test public void enableLruUpdateCallbackNotCalled_ifCallbacksNotDisabled() { ifNew = true; when(focusedRegionMap.disableLruUpdateCallback()).thenReturn(false); when(event.getOperation()).thenReturn(Operation.CREATE); doPut(); verify(focusedRegionMap, never()).enableLruUpdateCallback(); }
@Test public void basicPutPart2ToldClearDidNotOccur_ifPutDoneWithoutAClear() throws Exception { ifNew = true; when(event.getOperation()).thenReturn(Operation.CREATE); doPut(); verify(internalRegion, times(1)).basicPutPart2(any(), any(), anyBoolean(), anyLong(), eq(false)); }
@Override public void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws EntryNotFoundException { if (event.getOperation().isLocal()) { throw new UnsupportedOperationInTransactionException( "localDestroy() is not allowed in a transaction"); } TXRegionStub rs = getTXRegionStub(event.getRegion()); rs.destroyExistingEntry(event, cacheWrite, expectedOldValue); }
@Test public void serverPutWillCheckPutIfAbsentResult() { Object result = new Object(); operation = Operation.PUT_IF_ABSENT; when(event.getOperation()).thenReturn(operation); when(event.isCreate()).thenReturn(true); when(serverRegionProxy.put(key, value, null, event, operation, true, null, null, true)) .thenReturn(result); doCallRealMethod().when(region).serverPut(event, true, null); region.serverPut(event, true, null); verify(region).checkPutIfAbsentResult(event, value, result); }
private void updateLru() { if (!isClearOccurred()) { if (getEvent().getOperation().isCreate()) { getRegionMap().lruEntryCreate(getRegionEntry()); } else { getRegionMap().lruEntryUpdate(getRegionEntry()); } } }