@Override public void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws EntryNotFoundException { try { this.operationCount++; getRealDeal(event.getKeyInfo(), event.getRegion()).destroyExistingEntry(event, cacheWrite, expectedOldValue); trackBucketForTx(event.getKeyInfo()); } catch (TransactionDataRebalancedException | PrimaryBucketException re) { throw getTransactionException(event.getKeyInfo(), re); } }
@Override public void invalidateExistingEntry(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry) { try { this.operationCount++; getRealDeal(event.getKeyInfo(), event.getRegion()).invalidateExistingEntry(event, invokeCallbacks, forceNewEntry); trackBucketForTx(event.getKeyInfo()); } catch (TransactionDataRebalancedException | PrimaryBucketException re) { throw getTransactionException(event.getKeyInfo(), re); } }
@Override public boolean txPutEntry(EntryEventImpl event, boolean ifNew, boolean requireOldValue, boolean checkResources, Object expectedOldValue) { try { this.operationCount++; boolean retVal = getRealDeal(event.getKeyInfo(), (LocalRegion) event.getRegion()) .txPutEntry(event, ifNew, requireOldValue, checkResources, expectedOldValue); trackBucketForTx(event.getKeyInfo()); return retVal; } catch (TransactionDataRebalancedException | PrimaryBucketException re) { throw getTransactionException(event.getKeyInfo(), re); } }
@Override public boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) { try { this.operationCount++; boolean retVal = getRealDeal(event.getKeyInfo(), event.getRegion()).putEntry(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); trackBucketForTx(event.getKeyInfo()); return retVal; } catch (TransactionDataRebalancedException | PrimaryBucketException re) { throw getTransactionException(event.getKeyInfo(), re); } }
@Override public boolean putEntryOnRemote(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) throws DataLocationException { this.operationCount++; TXStateInterface tx = getRealDeal(event.getKeyInfo(), event.getRegion()); assert (tx instanceof TXState) : tx.getClass().getSimpleName(); return tx.putEntryOnRemote(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); }
@Override public boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) { if (logger.isDebugEnabled()) { // [DISTTX] TODO Remove throwable logger.debug("DistPeerTXStateStub.putEntry " + event.getKeyInfo().getKey(), new Throwable()); } boolean returnValue = super.putEntry(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); return returnValue; }
@Override public boolean putEntryOnRemote(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) throws DataLocationException { if (logger.isDebugEnabled()) { // [DISTTX] TODO Remove throwable logger.debug("DistPeerTXStateStub.putEntryOnRemote " + event.getKeyInfo().getKey(), new Throwable()); } boolean returnValue = super.putEntryOnRemote(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); return returnValue; }
@Override public void destroyOnRemote(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws DataLocationException { this.operationCount++; TXStateInterface tx = getRealDeal(event.getKeyInfo(), event.getRegion()); assert (tx instanceof TXState); tx.destroyOnRemote(event, cacheWrite, expectedOldValue); }
@Override public void invalidateOnRemote(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry) throws DataLocationException { this.operationCount++; TXStateInterface tx = getRealDeal(event.getKeyInfo(), event.getRegion()); assert (tx instanceof TXState); tx.invalidateOnRemote(event, invokeCallbacks, forceNewEntry); }
public boolean hasSeenEvent(EntryEventImpl event) { BucketRegion bucket = getLocalBucketById(event.getKeyInfo().getBucketId()); if (bucket == null) { return false; } else { return bucket.hasSeenEvent(event); } }
@Override public void invalidateOnRemote(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry) throws DataLocationException { PartitionedRegion pr = (PartitionedRegion) event.getRegion(); pr.getDataStore().invalidateLocally(event.getKeyInfo().getBucketId(), event); }
@Override public boolean putEntryOnRemote(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) throws DataLocationException { PartitionedRegion pr = (PartitionedRegion) event.getRegion(); return pr.getDataStore().putLocally(event.getKeyInfo().getBucketId(), event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified); }
@Override public void checkIfAboveThreshold(EntryEventImpl entryEvent) throws LowMemoryException { getRegionAdvisor().checkIfBucketSick(entryEvent.getKeyInfo().getBucketId(), entryEvent.getKey()); }
@Override public void destroyOnRemote(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws DataLocationException { PartitionedRegion pr = (PartitionedRegion) event.getRegion(); pr.getDataStore().destroyLocally(event.getKeyInfo().getBucketId(), event, expectedOldValue); return; }
@Override public boolean putEntryOnRemote(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) throws DataLocationException { if (logger.isDebugEnabled()) { // [DISTTX] TODO Remove throwable logger.debug("DistTXStateOnCoordinator.putEntryOnRemote " + event.getKeyInfo().getKey()/* * , new Throwable() */); } boolean returnValue = super.putEntryOnRemote(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); // putAll event is already added in postPutAll, don't add individual events // from the putAll operation again if (!event.getOperation().isPutAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } return returnValue; }
@Override public boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) { boolean retVal = false; final InternalRegion r = event.getRegion(); PartitionedRegion pr = (PartitionedRegion) r; try { retVal = pr.putRemotely(state.getTarget(), event, ifNew, ifOld, expectedOldValue, requireOldValue); } catch (TransactionException e) { RuntimeException re = getTransactionException(event.getKeyInfo(), e); re.initCause(e.getCause()); throw re; } catch (PrimaryBucketException e) { RuntimeException re = getTransactionException(event.getKeyInfo(), e); re.initCause(e); throw re; } catch (ForceReattemptException e) { waitToRetry(); RuntimeException re = getTransactionException(event.getKeyInfo(), e); re.initCause(e); throw re; } trackBucketForTx(event.getKeyInfo()); return retVal; }
@Override public boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue, long lastModified, boolean overwriteDestroyed) { if (logger.isDebugEnabled()) { // [DISTTX] TODO Remove throwable logger.debug( "DistTXStateOnCoordinator.putEntry " + event.getKeyInfo().getKey()/* * , new Throwable() */); } boolean returnValue = super.putEntry(event, ifNew, ifOld, expectedOldValue, requireOldValue, lastModified, overwriteDestroyed); // putAll event is already added in postPutAll, don't add individual events // from the putAll operation again if (!event.getOperation().isPutAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } return returnValue; }
@SuppressWarnings("unchecked") private boolean hasAdjunctRecipientsNeedingDelta(EntryEventImpl event) { PartitionedRegion partitionedRegion = (PartitionedRegion) this; BucketRegion bucketRegion; int bId = event.getKeyInfo().getBucketId(); try { bucketRegion = partitionedRegion.dataStore.getInitializedBucketForId(event.getKey(), bId); } catch (ForceReattemptException ignore) { return true; } Set<InternalDistributedMember> recipients = bucketRegion.getCacheDistributionAdvisor().adviseUpdate(event); Set<Object> twoMessages = bucketRegion.getBucketAdvisor().adviseRequiresTwoMessages(); CacheDistributionAdvisor cda = partitionedRegion.getCacheDistributionAdvisor(); FilterRoutingInfo filterRouting = cda.adviseFilterRouting(event, recipients); Set<Object> adjunctRecipients = bucketRegion.getAdjunctReceivers(event, recipients, twoMessages, filterRouting); Set cacheServerMembers = cda.adviseCacheServers(); return !Collections.disjoint(adjunctRecipients, cacheServerMembers); }
@Override public void destroyExistingEntry(final EntryEventImpl event, final boolean cacheWrite, Object expectedOldValue) { if (bridgeContext == null) { bridgeContext = event.getContext(); } if (hasSeenEvent(event)) { return; } TXEntryState tx = txWriteExistingEntry(event, expectedOldValue); final InternalRegion region = event.getRegion(); if (tx.destroy(event, cacheWrite, isOriginRemoteForEvents())) { Object key = event.getKey(); LocalRegion rr = region.getDataRegionForRead(event.getKeyInfo()); txReadRegion(rr).rmEntryUserAttr(key); recordEvent(event); } }
/** * @throws org.apache.geode.SerializationException if serialization fails */ public InvalidateOpImpl(String region, EntryEventImpl event) { super(MessageType.INVALIDATE, event.getCallbackArgument() != null ? 4 : 3); Object callbackArg = event.getCallbackArgument(); this.event = event; getMessage().addStringPart(region); getMessage().addStringOrObjPart(event.getKeyInfo().getKey()); getMessage().addBytesPart(event.getEventId().calcBytes()); if (callbackArg != null) { getMessage().addObjPart(callbackArg); } }