@Override public void resume() { this.firstProxy.getPool().setupServerAffinity(true); this.firstProxy.getPool().setServerAffinityLocation(this.serverAffinityLocation); if (logger.isDebugEnabled()) { logger.debug("TX: resuming transaction: {} server delegate: {}", getTransactionId(), this.serverAffinityLocation); } }
@Override public void commit() throws CommitConflictException { obtainLocalLocks(); try { TXCommitMessage txcm = null; try { txcm = firstProxy.commit(proxy.getTxId().getUniqId()); } finally { this.firstProxy.getPool().releaseServerAffinity(); } afterServerCommit(txcm); } catch (TransactionDataNodeHasDepartedException e) { throw new TransactionInDoubtException(e); } finally { lockReq.releaseLocal(); } }
@Test(expected = CacheClosedException.class) public void basicPutAllThrowsCacheClosedExceptionIfCacheIsClosing() { Map map = new HashMap(); map.put("key", "value"); DistributedPutAllOperation putAll = mock(DistributedPutAllOperation.class); when(putAll.getBaseEvent()).thenReturn(event); when(region.basicPutAll(map, putAll, null)).thenCallRealMethod(); when(region.getAtomicThresholdInfo()).thenReturn(mock(MemoryThresholdInfo.class)); when(serverRegionProxy.putAll(map, eventID, true, callbacks)).thenThrow(exception); region.basicPutAll(map, putAll, null); } }
@Override public void beforeCompletion() { obtainLocalLocks(); try { this.firstProxy.beforeCompletion(proxy.getTxId().getUniqId()); } catch (GemFireException e) { this.lockReq.releaseLocal(); this.firstProxy.getPool().releaseServerAffinity(); throw e; } }
String regName = srp.getRegionName(); ConcurrentMap allInterests = getRegionToInterestsMap(interestType, durable, receiveUpdatesAsInvalidates); UnregisterInterestOp.execute(srp.getPool(), regName, key, interestType, true/* isClosing */, keepAlive); } catch (Exception e) { if (!srp.getPool().getCancelCriterion().isCancelInProgress()) { logger.warn("Problem removing all interest on region={} interestType={} :{}", new Object[] {regName, InterestType.getString(interestType),
if (isDurable && !proxy.getPool().isDurableClient()) { throw new IllegalStateException( "Durable flag only applicable for durable clients."); if (!proxy.getPool().getSubscriptionEnabled()) { String msg = "Interest registration requires a pool whose queue is enabled."; throw new SubscriptionNotEnabledException(msg); serverKeys = proxy.registerInterest(key, interestType, interestResultPolicy, isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); break; logger.warn( "Usage of registerInterest('ALL_KEYS') has been deprecated. Please use registerInterestForAllKeys()"); serverKeys = proxy.registerInterest(".*", InterestType.REGULAR_EXPRESSION, interestResultPolicy, isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); } else { logger.warn( "Usage of registerInterest(List) has been deprecated. Please use registerInterestForKeys(Iterable)"); serverKeys = proxy.registerInterestList((List) key, interestResultPolicy, isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); } else { serverKeys = proxy.registerInterest(key, InterestType.KEY, interestResultPolicy, isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); serverKeys = proxy.registerInterest(key, InterestType.OQL_QUERY, interestResultPolicy, isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); break;
@Override public void afterCompletion(int status) { try { if (txRolledback) { return; } TXCommitMessage txcm = this.firstProxy.afterCompletion(status, proxy.getTxId().getUniqId()); if (status == Status.STATUS_COMMITTED) { if (txcm == null) { throw new TransactionInDoubtException( "Commit failed on cache server"); } else { afterServerCommit(txcm); } } else if (status == Status.STATUS_ROLLEDBACK) { if (this.internalAfterSendRollback != null) { this.internalAfterSendRollback.run(); } this.firstProxy.getPool().releaseServerAffinity(); } } finally { if (status == Status.STATUS_COMMITTED) { // rollback does not grab locks this.lockReq.releaseLocal(); } this.firstProxy.getPool().releaseServerAffinity(); } }
@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); }
@Test(expected = CacheClosedException.class) public void basicRemoveAllThrowsCacheClosedExceptionIfCacheIsClosing() { String[] strings = {"key"}; Set keys = new HashSet<>(Arrays.asList(strings)); DistributedRemoveAllOperation removeAll = mock(DistributedRemoveAllOperation.class); when(removeAll.getBaseEvent()).thenReturn(event); when(region.basicRemoveAll(keys, removeAll, null)).thenCallRealMethod(); when(serverRegionProxy.removeAll(keys, eventID, callbacks)).thenThrow(exception); region.basicRemoveAll(keys, removeAll, null); }
@Test public void commitReleasesServerAffinity_whenCommitThrowsAnException() { TXManagerImpl txManager = mock(TXManagerImpl.class); when(cache.getTxManager()).thenReturn(txManager); when(serverRegionProxy.commit(anyInt())).thenThrow(new InternalGemFireError()); doNothing().when(cancelCriterion).checkCancelInProgress(null); doNothing().when(txManager).setTXState(null); ClientTXStateStub stub = spy(new ClientTXStateStub(cache, dm, stateProxy, target, region)); InOrder order = inOrder(serverRegionProxy, internalPool); assertThatThrownBy(() -> stub.commit()).isInstanceOf(InternalGemFireError.class); order.verify(serverRegionProxy).commit(anyInt()); order.verify(internalPool).releaseServerAffinity(); } }
(InternalDistributedSystem) currentCache.getDistributedSystem(); ServerRegionProxy regionProxy = new ServerRegionProxy(ClientHealthMonitoringRegion.ADMIN_REGION_NAME, pool); try { event.setEventId(eventId); regionProxy.putForMetaRegion(ds.getDistributedMember(), stats, null, event, null); } finally { event.release();
region.getServerProxy().addListInterest((List) key, InterestResultPolicy.fromOrdinal(interestResultPolicy), isDurable, receiveUpdatesAsInvalidates); } else { region.getServerProxy().addSingleInterest(key, interestType, InterestResultPolicy.fromOrdinal(interestResultPolicy), isDurable, receiveUpdatesAsInvalidates);
this.serverRegionProxy = this.getPoolName() != null ? new ServerRegionProxy(this) : null; this.imageState = new UnsharedImageState(this.serverRegionProxy != null, getDataPolicy().withReplication() || getDataPolicy().isPreloaded(),
Object result = mySRP.put(key, value, event.getDeltaBytes(), event, op, requireOldValue, expectedOldValue, callbackArg, isCreate);
proxyResult = getServerProxy().removeAll(keys, eventId, event.getCallbackArgument()); if (isDebugEnabled) { logger.debug("removeAll received response from server: {}", proxyResult);
@Test public void commitReleasesServerAffinityAfterCommit() { TXCommitMessage txCommitMessage = mock(TXCommitMessage.class); TXManagerImpl txManager = mock(TXManagerImpl.class); when(cache.getTxManager()).thenReturn(txManager); when(serverRegionProxy.commit(anyInt())).thenReturn(txCommitMessage); doNothing().when(cancelCriterion).checkCancelInProgress(null); doNothing().when(txManager).setTXState(null); ClientTXStateStub stub = spy(new ClientTXStateStub(cache, dm, stateProxy, target, region)); InOrder order = inOrder(serverRegionProxy, internalPool, cancelCriterion); stub.commit(); order.verify(serverRegionProxy).commit(anyInt()); order.verify(internalPool).releaseServerAffinity(); order.verify(cancelCriterion).checkCancelInProgress(null); }
@Override public void suspend() { this.serverAffinityLocation = this.firstProxy.getPool().getServerAffinityLocation(); this.firstProxy.getPool().releaseServerAffinity(); if (logger.isDebugEnabled()) { logger.debug("TX: suspending transaction: {} server delegate: {}", getTransactionId(), this.serverAffinityLocation); } }
proxyResult = getServerProxy().putAll(map, eventId, !event.isGenerateCallbacks(), event.getCallbackArgument()); if (isDebugEnabled) {
public ClientTXStateStub(InternalCache cache, DistributionManager dm, TXStateProxy stateProxy, DistributedMember target, InternalRegion firstRegion) { super(stateProxy, target); this.cache = cache; this.dm = dm; this.firstProxy = firstRegion.getServerProxy(); this.firstProxy.getPool().setupServerAffinity(true); if (recordedTransactionalOperations != null) { recordedTransactionalOperations.set(this.recordedOperations); } }