You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2018/04/27 16:46:00 UTC

[geode] branch develop updated: GEODE-5134: pendingCallbacks is never null (#1863)

This is an automated email from the ASF dual-hosted git repository.

dschneider pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new fafaf0b  GEODE-5134: pendingCallbacks is never null (#1863)
fafaf0b is described below

commit fafaf0b454f96662d41c589b278afedd26e9312b
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Fri Apr 27 09:45:55 2018 -0700

    GEODE-5134: pendingCallbacks is never null (#1863)
    
    The tx* method implementations now always expect the pendingCallbacks parameter to not be null.
    Also "cb" was renamed to "callback" for clarity.
---
 .../geode/internal/cache/AbstractRegionMap.java    | 452 +++++++++------------
 .../geode/internal/cache/ProxyRegionMap.java       |  68 +---
 .../geode/internal/cache/TXCommitMessage.java      |   4 +-
 .../internal/cache/AbstractRegionMapTest.java      |   8 +-
 4 files changed, 225 insertions(+), 307 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
index ac27052..5e7a09b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
@@ -1040,13 +1040,14 @@ public abstract class AbstractRegionMap
       List<EntryEventImpl> pendingCallbacks, FilterRoutingInfo filterRoutingInfo,
       ClientProxyMembershipID bridgeContext, boolean isOriginRemote, TXEntryState txEntryState,
       VersionTag versionTag, long tailKey) {
+    assert pendingCallbacks != null;
     final boolean isDebugEnabled = logger.isDebugEnabled();
 
     final LocalRegion owner = _getOwner();
 
     final boolean isRegionReady = !inTokenMode;
     final boolean hasRemoteOrigin = !((TXId) txId).getMemberId().equals(owner.getMyId());
-    boolean cbEventInPending = false;
+    boolean callbackEventAddedToPending = false;
     IndexManager oqlIndexManager = owner.getIndexManager();
     try {
       RegionEntry re = getEntry(key);
@@ -1065,20 +1066,20 @@ public abstract class AbstractRegionMap
               // Create an entry event only if the calling context is
               // a receipt of a TXCommitMessage AND there are callbacks installed
               // for this region
-              boolean invokeCallbacks = shouldCreateCBEvent(owner, isRegionReady || inRI);
+              boolean invokeCallbacks = shouldCreateCallbackEvent(owner, isRegionReady || inRI);
               @Released
-              EntryEventImpl cbEvent =
-                  createCBEvent(owner, op, key, null, txId, txEvent, eventId, aCallbackArgument,
-                      filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
+              EntryEventImpl callbackEvent = createCallbackEvent(owner, op, key, null, txId,
+                  txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
+                  txEntryState, versionTag, tailKey);
               try {
 
                 if (owner.isUsedForPartitionedRegionBucket()) {
-                  txHandleWANEvent(owner, cbEvent, txEntryState);
+                  txHandleWANEvent(owner, callbackEvent, txEntryState);
                 }
-                cbEvent.setRegionEntry(re);
-                cbEvent.setOldValue(oldValue);
+                callbackEvent.setRegionEntry(re);
+                callbackEvent.setOldValue(oldValue);
                 if (isDebugEnabled) {
-                  logger.debug("txApplyDestroy cbEvent={}", cbEvent);
+                  logger.debug("txApplyDestroy callbackEvent={}", callbackEvent);
                 }
 
                 txRemoveOldIndexEntry(Operation.DESTROY, re);
@@ -1087,7 +1088,7 @@ public abstract class AbstractRegionMap
                 }
                 boolean clearOccured = false;
                 try {
-                  processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState);
+                  processAndGenerateTXVersionTag(owner, callbackEvent, re, txEntryState);
                   if (inTokenMode) {
                     if (oldValue == Token.TOMBSTONE) {
                       owner.unscheduleTombstone(re);
@@ -1096,9 +1097,9 @@ public abstract class AbstractRegionMap
                   } else {
                     if (!re.isTombstone()) {
                       {
-                        if (shouldPerformConcurrencyChecks(owner, cbEvent)
-                            && cbEvent.getVersionTag() != null) {
-                          re.makeTombstone(owner, cbEvent.getVersionTag());
+                        if (shouldPerformConcurrencyChecks(owner, callbackEvent)
+                            && callbackEvent.getVersionTag() != null) {
+                          re.makeTombstone(owner, callbackEvent.getVersionTag());
                         } else {
                           re.removePhase1(owner, false); // fix for bug 43063
                           re.removePhase2();
@@ -1117,25 +1118,20 @@ public abstract class AbstractRegionMap
                 owner.txApplyDestroyPart2(re, re.getKey(), inTokenMode,
                     clearOccured /* Clear Conflciting with the operation */);
                 if (invokeCallbacks) {
-                  switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                  if (pendingCallbacks == null) {
-                    owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, cbEvent,
-                        true/* callDispatchListenerEvent */);
-                  } else {
-                    pendingCallbacks.add(cbEvent);
-                    cbEventInPending = true;
-                  }
+                  switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                  pendingCallbacks.add(callbackEvent);
+                  callbackEventAddedToPending = true;
                 }
                 if (!clearOccured) {
                   lruEntryDestroy(re);
                 }
                 if (owner.getConcurrencyChecksEnabled() && txEntryState != null
-                    && cbEvent != null) {
-                  txEntryState.setVersionTag(cbEvent.getVersionTag());
+                    && callbackEvent != null) {
+                  txEntryState.setVersionTag(callbackEvent.getVersionTag());
                 }
               } finally {
-                if (!cbEventInPending)
-                  cbEvent.release();
+                if (!callbackEventAddedToPending)
+                  callbackEvent.release();
               }
             }
           }
@@ -1155,7 +1151,7 @@ public abstract class AbstractRegionMap
         if (oqlIndexManager != null) {
           oqlIndexManager.waitForIndexInit();
         }
-        EntryEventImpl cbEvent = null;
+        EntryEventImpl callbackEvent = null;
         try {
           synchronized (newRe) {
             RegionEntry oldRe = putEntryIfAbsent(key, newRe);
@@ -1167,29 +1163,25 @@ public abstract class AbstractRegionMap
                   oldRe = putEntryIfAbsent(key, newRe);
                 } else {
                   try {
-                    boolean invokeCallbacks = shouldCreateCBEvent(owner, isRegionReady || inRI);
-                    cbEvent = createCBEvent(owner, op, key, null, txId, txEvent, eventId,
-                        aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState,
+                    boolean invokeCallbacks =
+                        shouldCreateCallbackEvent(owner, isRegionReady || inRI);
+                    callbackEvent = createCallbackEvent(owner, op, key, null, txId, txEvent,
+                        eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState,
                         versionTag, tailKey);
                     try {
-                      cbEvent.setRegionEntry(oldRe);
-                      cbEvent.setOldValue(Token.NOT_AVAILABLE);
+                      callbackEvent.setRegionEntry(oldRe);
+                      callbackEvent.setOldValue(Token.NOT_AVAILABLE);
                       if (isDebugEnabled) {
-                        logger.debug("txApplyDestroy token mode cbEvent={}", cbEvent);
+                        logger.debug("txApplyDestroy token mode callbackEvent={}", callbackEvent);
                       }
                       if (owner.isUsedForPartitionedRegionBucket()) {
-                        txHandleWANEvent(owner, cbEvent, txEntryState);
+                        txHandleWANEvent(owner, callbackEvent, txEntryState);
                       }
-                      processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState);
+                      processAndGenerateTXVersionTag(owner, callbackEvent, oldRe, txEntryState);
                       if (invokeCallbacks) {
-                        switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                        if (pendingCallbacks == null) {
-                          owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, cbEvent,
-                              dispatchListenerEvent);
-                        } else {
-                          pendingCallbacks.add(cbEvent);
-                          cbEventInPending = true;
-                        }
+                        switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                        pendingCallbacks.add(callbackEvent);
+                        callbackEventAddedToPending = true;
                       }
                       int oldSize = 0;
                       boolean wasTombstone = oldRe.isTombstone();
@@ -1208,16 +1200,16 @@ public abstract class AbstractRegionMap
                           false /* Clear Conflicting with the operation */);
                       lruEntryDestroy(oldRe);
                     } finally {
-                      if (!cbEventInPending)
-                        cbEvent.release();
+                      if (!callbackEventAddedToPending)
+                        callbackEvent.release();
                     }
                   } catch (RegionClearedException rce) {
                     owner.txApplyDestroyPart2(oldRe, oldRe.getKey(), inTokenMode,
                         true /* Clear Conflicting with the operation */);
                   }
-                  if (shouldPerformConcurrencyChecks(owner, cbEvent)
-                      && cbEvent.getVersionTag() != null) {
-                    oldRe.makeTombstone(owner, cbEvent.getVersionTag());
+                  if (shouldPerformConcurrencyChecks(owner, callbackEvent)
+                      && callbackEvent.getVersionTag() != null) {
+                    oldRe.makeTombstone(owner, callbackEvent.getVersionTag());
                   } else if (!inTokenMode) {
                     // only remove for NORMAL regions if they do not generate versions see 51781
                     oldRe.removePhase1(owner, false); // fix for bug 43063
@@ -1231,35 +1223,30 @@ public abstract class AbstractRegionMap
             if (!opCompleted) {
               // already has value set to Token.DESTROYED
               opCompleted = true;
-              boolean invokeCallbacks = shouldCreateCBEvent(owner, isRegionReady || inRI);
-              cbEvent =
-                  createCBEvent(owner, op, key, null, txId, txEvent, eventId, aCallbackArgument,
-                      filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
+              boolean invokeCallbacks = shouldCreateCallbackEvent(owner, isRegionReady || inRI);
+              callbackEvent = createCallbackEvent(owner, op, key, null, txId, txEvent, eventId,
+                  aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag,
+                  tailKey);
               try {
-                cbEvent.setRegionEntry(newRe);
-                cbEvent.setOldValue(Token.NOT_AVAILABLE);
+                callbackEvent.setRegionEntry(newRe);
+                callbackEvent.setOldValue(Token.NOT_AVAILABLE);
                 if (isDebugEnabled) {
-                  logger.debug("txApplyDestroy token mode cbEvent={}", cbEvent);
+                  logger.debug("txApplyDestroy token mode callbackEvent={}", callbackEvent);
                 }
                 if (owner.isUsedForPartitionedRegionBucket()) {
-                  txHandleWANEvent(owner, cbEvent, txEntryState);
+                  txHandleWANEvent(owner, callbackEvent, txEntryState);
                 }
-                processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState);
+                processAndGenerateTXVersionTag(owner, callbackEvent, newRe, txEntryState);
                 if (invokeCallbacks) {
-                  switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                  if (pendingCallbacks == null) {
-                    owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, cbEvent,
-                        dispatchListenerEvent);
-                  } else {
-                    pendingCallbacks.add(cbEvent);
-                    cbEventInPending = true;
-                  }
+                  switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                  pendingCallbacks.add(callbackEvent);
+                  callbackEventAddedToPending = true;
                 }
                 EntryLogger.logTXDestroy(_getOwnerObject(), key);
                 owner.updateSizeOnCreate(newRe.getKey(), 0);
-                if (shouldPerformConcurrencyChecks(owner, cbEvent)
-                    && cbEvent.getVersionTag() != null) {
-                  newRe.makeTombstone(owner, cbEvent.getVersionTag());
+                if (shouldPerformConcurrencyChecks(owner, callbackEvent)
+                    && callbackEvent.getVersionTag() != null) {
+                  newRe.makeTombstone(owner, callbackEvent.getVersionTag());
                 } else if (!inTokenMode) {
                   // only remove for NORMAL regions if they do not generate versions see 51781
                   newRe.removePhase1(owner, false); // fix for bug 43063
@@ -1271,12 +1258,13 @@ public abstract class AbstractRegionMap
                 // Note no need for LRU work since the entry is destroyed
                 // and will be removed when gii completes
               } finally {
-                if (!cbEventInPending)
-                  cbEvent.release();
+                if (!callbackEventAddedToPending)
+                  callbackEvent.release();
               }
             }
-            if (owner.getConcurrencyChecksEnabled() && txEntryState != null && cbEvent != null) {
-              txEntryState.setVersionTag(cbEvent.getVersionTag());
+            if (owner.getConcurrencyChecksEnabled() && txEntryState != null
+                && callbackEvent != null) {
+              txEntryState.setVersionTag(callbackEvent.getVersionTag());
             }
           }
         } catch (RegionClearedException e) {
@@ -1293,22 +1281,19 @@ public abstract class AbstractRegionMap
         // causing region entry to be absent.
         // Notify clients with client events.
         @Released
-        EntryEventImpl cbEvent = createCBEvent(owner, op, key, null, txId, txEvent, eventId,
-            aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
+        EntryEventImpl callbackEvent =
+            createCallbackEvent(owner, op, key, null, txId, txEvent, eventId, aCallbackArgument,
+                filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
         try {
           if (owner.isUsedForPartitionedRegionBucket()) {
-            txHandleWANEvent(owner, cbEvent, txEntryState);
-          }
-          switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-          if (pendingCallbacks == null) {
-            owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, cbEvent, false);
-          } else {
-            pendingCallbacks.add(cbEvent);
-            cbEventInPending = true;
+            txHandleWANEvent(owner, callbackEvent, txEntryState);
           }
+          switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+          pendingCallbacks.add(callbackEvent);
+          callbackEventAddedToPending = true;
         } finally {
-          if (!cbEventInPending)
-            cbEvent.release();
+          if (!callbackEventAddedToPending)
+            callbackEvent.release();
         }
       }
     } catch (DiskAccessException dae) {
@@ -1834,11 +1819,12 @@ public abstract class AbstractRegionMap
       List<EntryEventImpl> pendingCallbacks, FilterRoutingInfo filterRoutingInfo,
       ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,
       long tailKey) {
+    assert pendingCallbacks != null;
     // boolean didInvalidate = false;
     final LocalRegion owner = _getOwner();
 
     @Released
-    EntryEventImpl cbEvent = null;
+    EntryEventImpl callbackEvent = null;
     boolean forceNewEntry = !owner.isInitialized() && owner.isAllEvents();
 
     final boolean hasRemoteOrigin = !((TXId) txId).getMemberId().equals(owner.getMyId());
@@ -1872,17 +1858,17 @@ public abstract class AbstractRegionMap
                   // a receipt of a TXCommitMessage AND there are callbacks
                   // installed
                   // for this region
-                  boolean invokeCallbacks = shouldCreateCBEvent(owner, owner.isInitialized());
-                  boolean cbEventInPending = false;
-                  cbEvent = createCBEvent(owner,
+                  boolean invokeCallbacks = shouldCreateCallbackEvent(owner, owner.isInitialized());
+                  boolean callbackEventInPending = false;
+                  callbackEvent = createCallbackEvent(owner,
                       localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key, newValue,
                       txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
                       txEntryState, versionTag, tailKey);
                   try {
-                    cbEvent.setRegionEntry(oldRe);
-                    cbEvent.setOldValue(oldValue);
+                    callbackEvent.setRegionEntry(oldRe);
+                    callbackEvent.setOldValue(oldValue);
                     if (logger.isDebugEnabled()) {
-                      logger.debug("txApplyInvalidate cbEvent={}", cbEvent);
+                      logger.debug("txApplyInvalidate callbackEvent={}", callbackEvent);
                     }
 
                     txRemoveOldIndexEntry(Operation.INVALIDATE, oldRe);
@@ -1894,7 +1880,7 @@ public abstract class AbstractRegionMap
                           aCallbackArgument);
                     }
                     oldRe.setValueResultOfSearch(false);
-                    processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState);
+                    processAndGenerateTXVersionTag(owner, callbackEvent, oldRe, txEntryState);
                     boolean clearOccured = false;
                     try {
                       oldRe.setValue(owner, oldRe.prepareValueForCache(owner, newValue, true));
@@ -1909,42 +1895,38 @@ public abstract class AbstractRegionMap
                     owner.txApplyInvalidatePart2(oldRe, oldRe.getKey(), didDestroy, true);
                     // didInvalidate = true;
                     if (invokeCallbacks) {
-                      switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                      if (pendingCallbacks == null) {
-                        owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, cbEvent,
-                            true/* callDispatchListenerEvent */);
-                      } else {
-                        pendingCallbacks.add(cbEvent);
-                        cbEventInPending = true;
-                      }
+                      switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                      pendingCallbacks.add(callbackEvent);
+                      callbackEventInPending = true;
                     }
                     if (!clearOccured) {
                       lruEntryUpdate(oldRe);
                     }
-                    if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) {
-                      txEntryState.setVersionTag(cbEvent.getVersionTag());
+                    if (shouldPerformConcurrencyChecks(owner, callbackEvent)
+                        && txEntryState != null) {
+                      txEntryState.setVersionTag(callbackEvent.getVersionTag());
                     }
                   } finally {
-                    if (!cbEventInPending)
-                      cbEvent.release();
+                    if (!callbackEventInPending)
+                      callbackEvent.release();
                   }
                 }
               }
             }
             if (!opCompleted) {
-              boolean invokeCallbacks = shouldCreateCBEvent(owner, owner.isInitialized());
-              boolean cbEventInPending = false;
-              cbEvent =
-                  createCBEvent(owner, localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE,
-                      key, newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo,
-                      bridgeContext, txEntryState, versionTag, tailKey);
+              boolean invokeCallbacks = shouldCreateCallbackEvent(owner, owner.isInitialized());
+              boolean callbackEventInPending = false;
+              callbackEvent = createCallbackEvent(owner,
+                  localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key, newValue, txId,
+                  txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
+                  txEntryState, versionTag, tailKey);
               try {
-                cbEvent.setRegionEntry(newRe);
+                callbackEvent.setRegionEntry(newRe);
                 txRemoveOldIndexEntry(Operation.INVALIDATE, newRe);
                 newRe.setValueResultOfSearch(false);
                 boolean clearOccured = false;
                 try {
-                  processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState);
+                  processAndGenerateTXVersionTag(owner, callbackEvent, newRe, txEntryState);
                   newRe.setValue(owner, newRe.prepareValueForCache(owner, newValue, true));
                   EntryLogger.logTXInvalidate(_getOwnerObject(), key);
                   owner.updateSizeOnCreate(newRe.getKey(), 0);// we are putting in a new invalidated
@@ -1955,26 +1937,21 @@ public abstract class AbstractRegionMap
                 owner.txApplyInvalidatePart2(newRe, newRe.getKey(), didDestroy, true);
 
                 if (invokeCallbacks) {
-                  switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                  if (pendingCallbacks == null) {
-                    owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, cbEvent,
-                        true/* callDispatchListenerEvent */);
-                  } else {
-                    pendingCallbacks.add(cbEvent);
-                    cbEventInPending = true;
-                  }
+                  switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                  pendingCallbacks.add(callbackEvent);
+                  callbackEventInPending = true;
                 }
                 opCompleted = true;
                 if (!clearOccured) {
                   lruEntryCreate(newRe);
                   incEntryCount(1);
                 }
-                if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) {
-                  txEntryState.setVersionTag(cbEvent.getVersionTag());
+                if (shouldPerformConcurrencyChecks(owner, callbackEvent) && txEntryState != null) {
+                  txEntryState.setVersionTag(callbackEvent.getVersionTag());
                 }
               } finally {
-                if (!cbEventInPending)
-                  cbEvent.release();
+                if (!callbackEventInPending)
+                  callbackEvent.release();
               }
             }
           } finally {
@@ -1995,15 +1972,15 @@ public abstract class AbstractRegionMap
               // a receipt of a TXCommitMessage AND there are callbacks
               // installed
               // for this region
-              boolean invokeCallbacks = shouldCreateCBEvent(owner, owner.isInitialized());
-              boolean cbEventInPending = false;
-              cbEvent =
-                  createCBEvent(owner, localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE,
-                      key, newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo,
-                      bridgeContext, txEntryState, versionTag, tailKey);
+              boolean invokeCallbacks = shouldCreateCallbackEvent(owner, owner.isInitialized());
+              boolean callbackEventInPending = false;
+              callbackEvent = createCallbackEvent(owner,
+                  localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key, newValue, txId,
+                  txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
+                  txEntryState, versionTag, tailKey);
               try {
-                cbEvent.setRegionEntry(re);
-                cbEvent.setOldValue(oldValue);
+                callbackEvent.setRegionEntry(re);
+                callbackEvent.setOldValue(oldValue);
                 txRemoveOldIndexEntry(Operation.INVALIDATE, re);
                 if (didDestroy) {
                   re.txDidDestroy(owner.cacheTimeMillis());
@@ -2012,7 +1989,7 @@ public abstract class AbstractRegionMap
                   txEvent.addInvalidate(owner, re, re.getKey(), newValue, aCallbackArgument);
                 }
                 re.setValueResultOfSearch(false);
-                processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState);
+                processAndGenerateTXVersionTag(owner, callbackEvent, re, txEntryState);
                 boolean clearOccured = false;
                 try {
                   re.setValue(owner, re.prepareValueForCache(owner, newValue, true));
@@ -2024,24 +2001,19 @@ public abstract class AbstractRegionMap
                 owner.txApplyInvalidatePart2(re, re.getKey(), didDestroy, true);
                 // didInvalidate = true;
                 if (invokeCallbacks) {
-                  switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                  if (pendingCallbacks == null) {
-                    owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, cbEvent,
-                        true/* callDispatchListenerEvent */);
-                  } else {
-                    pendingCallbacks.add(cbEvent);
-                    cbEventInPending = true;
-                  }
+                  switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                  pendingCallbacks.add(callbackEvent);
+                  callbackEventInPending = true;
                 }
                 if (!clearOccured) {
                   lruEntryUpdate(re);
                 }
-                if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) {
-                  txEntryState.setVersionTag(cbEvent.getVersionTag());
+                if (shouldPerformConcurrencyChecks(owner, callbackEvent) && txEntryState != null) {
+                  txEntryState.setVersionTag(callbackEvent.getVersionTag());
                 }
               } finally {
-                if (!cbEventInPending)
-                  cbEvent.release();
+                if (!callbackEventInPending)
+                  callbackEvent.release();
               }
               return;
             }
@@ -2053,22 +2025,18 @@ public abstract class AbstractRegionMap
           // that the invalidate is already applied on the Initial image
           // provider, thus causing region entry to be absent.
           // Notify clients with client events.
-          boolean cbEventInPending = false;
-          cbEvent =
-              createCBEvent(owner, localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key,
-                  newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo,
-                  bridgeContext, txEntryState, versionTag, tailKey);
+          boolean callbackEventInPending = false;
+          callbackEvent = createCallbackEvent(owner,
+              localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key, newValue, txId,
+              txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState,
+              versionTag, tailKey);
           try {
-            switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-            if (pendingCallbacks == null) {
-              owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, cbEvent, false);
-            } else {
-              pendingCallbacks.add(cbEvent);
-              cbEventInPending = true;
-            }
+            switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+            pendingCallbacks.add(callbackEvent);
+            callbackEventInPending = true;
           } finally {
-            if (!cbEventInPending)
-              cbEvent.release();
+            if (!callbackEventInPending)
+              callbackEvent.release();
           }
         }
       }
@@ -2594,6 +2562,7 @@ public abstract class AbstractRegionMap
       List<EntryEventImpl> pendingCallbacks, FilterRoutingInfo filterRoutingInfo,
       ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,
       long tailKey) {
+    assert pendingCallbacks != null;
     final LocalRegion owner = _getOwner();
     if (owner == null) {
       // "fix" for bug 32440
@@ -2609,19 +2578,20 @@ public abstract class AbstractRegionMap
     final boolean isClientTXOriginator = owner.getCache().isClient() && !hasRemoteOrigin;
     final boolean isRegionReady = owner.isInitialized();
     @Released
-    EntryEventImpl cbEvent = null;
-    boolean invokeCallbacks = shouldCreateCBEvent(owner, isRegionReady);
-    boolean cbEventInPending = false;
-    cbEvent = createCallBackEvent(owner, putOp, key, newValue, txId, txEvent, eventId,
-        aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
+    EntryEventImpl callbackEvent = null;
+    boolean invokeCallbacks = shouldCreateCallbackEvent(owner, isRegionReady);
+    boolean callbackEventInPending = false;
+    callbackEvent =
+        createTransactionCallbackEvent(owner, putOp, key, newValue, txId, txEvent, eventId,
+            aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
     try {
       if (logger.isDebugEnabled()) {
-        logger.debug("txApplyPut cbEvent={}", cbEvent);
+        logger.debug("txApplyPut callbackEvent={}", callbackEvent);
       }
 
       if (owner.isUsedForPartitionedRegionBucket()) {
-        newValue = EntryEventImpl.getCachedDeserializable(nv, cbEvent);
-        txHandleWANEvent(owner, cbEvent, txEntryState);
+        newValue = EntryEventImpl.getCachedDeserializable(nv, callbackEvent);
+        txHandleWANEvent(owner, callbackEvent, txEntryState);
       }
 
       boolean opCompleted = false;
@@ -2642,9 +2612,9 @@ public abstract class AbstractRegionMap
           // are initialized.
           // Otherwise use the standard create/update logic
           if (!owner.isAllEvents() || (!putOp.isCreate() && isRegionReady)) {
-            cbEventInPending = applyTxUpdateOnReplicateOrRedundantCopy(key, nv, didDestroy, txEvent,
-                aCallbackArgument, pendingCallbacks, txEntryState, owner, putOp, newValue,
-                hasRemoteOrigin, cbEvent, invokeCallbacks, cbEventInPending, opCompleted);
+            callbackEventInPending = applyTxUpdateOnReplicateOrRedundantCopy(key, nv, didDestroy,
+                txEvent, aCallbackArgument, pendingCallbacks, txEntryState, owner, putOp, newValue,
+                hasRemoteOrigin, callbackEvent, invokeCallbacks, opCompleted);
             return;
           }
         }
@@ -2666,9 +2636,9 @@ public abstract class AbstractRegionMap
                   // Net writers are not called for received transaction data
                   final int oldSize = owner.calculateRegionEntryValueSize(oldRe);
                   final boolean oldIsRemoved = oldRe.isDestroyedOrRemoved();
-                  if (cbEvent != null) {
-                    cbEvent.setRegionEntry(oldRe);
-                    cbEvent.setOldValue(oldRe.getValueInVM(owner)); // OFFHEAP eei
+                  if (callbackEvent != null) {
+                    callbackEvent.setRegionEntry(oldRe);
+                    callbackEvent.setOldValue(oldRe.getValueInVM(owner)); // OFFHEAP eei
                   }
                   boolean clearOccured = false;
                   // Set RegionEntry updateInProgress
@@ -2686,11 +2656,11 @@ public abstract class AbstractRegionMap
                     }
                     oldRe.setValueResultOfSearch(putOp.isNetSearch());
                     try {
-                      processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState);
+                      processAndGenerateTXVersionTag(owner, callbackEvent, oldRe, txEntryState);
                       boolean wasTombstone = oldRe.isTombstone();
                       {
-                        oldRe.setValue(owner, oldRe.prepareValueForCache(owner, newValue, cbEvent,
-                            !putOp.isCreate()));
+                        oldRe.setValue(owner, oldRe.prepareValueForCache(owner, newValue,
+                            callbackEvent, !putOp.isCreate()));
                         if (wasTombstone) {
                           owner.unscheduleTombstone(oldRe);
                         }
@@ -2724,18 +2694,11 @@ public abstract class AbstractRegionMap
                   }
                   if (invokeCallbacks) {
                     if (!oldIsRemoved) {
-                      cbEvent.makeUpdate();
-                    }
-                    switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                    if (pendingCallbacks == null) {
-                      owner.invokeTXCallbacks(
-                          cbEvent.op.isCreate() ? EnumListenerEvent.AFTER_CREATE
-                              : EnumListenerEvent.AFTER_UPDATE,
-                          cbEvent, true/* callDispatchListenerEvent */);
-                    } else {
-                      pendingCallbacks.add(cbEvent);
-                      cbEventInPending = true;
+                      callbackEvent.makeUpdate();
                     }
+                    switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                    pendingCallbacks.add(callbackEvent);
+                    callbackEventInPending = true;
                   }
                   if (!clearOccured) {
                     lruEntryUpdate(oldRe);
@@ -2745,9 +2708,9 @@ public abstract class AbstractRegionMap
             }
             if (!opCompleted) {
               putOp = putOp.getCorrespondingCreateOp();
-              if (cbEvent != null) {
-                cbEvent.setRegionEntry(newRe);
-                cbEvent.setOldValue(null);
+              if (callbackEvent != null) {
+                callbackEvent.setRegionEntry(newRe);
+                callbackEvent.setOldValue(null);
               }
               boolean clearOccured = false;
               // Set RegionEntry updateInProgress
@@ -2766,10 +2729,10 @@ public abstract class AbstractRegionMap
                 newRe.setValueResultOfSearch(putOp.isNetSearch());
                 try {
 
-                  processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState);
+                  processAndGenerateTXVersionTag(owner, callbackEvent, newRe, txEntryState);
                   {
-                    newRe.setValue(owner,
-                        newRe.prepareValueForCache(owner, newValue, cbEvent, !putOp.isCreate()));
+                    newRe.setValue(owner, newRe.prepareValueForCache(owner, newValue, callbackEvent,
+                        !putOp.isCreate()));
                   }
                   owner.updateSizeOnCreate(newRe.getKey(),
                       owner.calculateRegionEntryValueSize(newRe));
@@ -2790,16 +2753,11 @@ public abstract class AbstractRegionMap
               }
               opCompleted = true;
               if (invokeCallbacks) {
-                cbEvent.makeCreate();
-                cbEvent.setOldValue(null);
-                switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-                if (pendingCallbacks == null) {
-                  owner.invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, cbEvent,
-                      true/* callDispatchListenerEvent */);
-                } else {
-                  pendingCallbacks.add(cbEvent);
-                  cbEventInPending = true;
-                }
+                callbackEvent.makeCreate();
+                callbackEvent.setOldValue(null);
+                switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+                pendingCallbacks.add(callbackEvent);
+                callbackEventInPending = true;
               }
               if (!clearOccured) {
                 lruEntryCreate(newRe);
@@ -2812,8 +2770,8 @@ public abstract class AbstractRegionMap
             }
           }
         }
-        if (owner.getConcurrencyChecksEnabled() && txEntryState != null && cbEvent != null) {
-          txEntryState.setVersionTag(cbEvent.getVersionTag());
+        if (owner.getConcurrencyChecksEnabled() && txEntryState != null && callbackEvent != null) {
+          txEntryState.setVersionTag(callbackEvent.getVersionTag());
         }
       } catch (DiskAccessException dae) {
         owner.handleDiskAccessException(dae);
@@ -2824,16 +2782,17 @@ public abstract class AbstractRegionMap
         }
       }
     } finally {
-      if (!cbEventInPending)
-        cbEvent.release();
+      if (!callbackEventInPending)
+        callbackEvent.release();
     }
   }
 
   private boolean applyTxUpdateOnReplicateOrRedundantCopy(Object key, Object nv, boolean didDestroy,
       TXRmtEvent txEvent, Object aCallbackArgument, List<EntryEventImpl> pendingCallbacks,
       TXEntryState txEntryState, LocalRegion owner, Operation putOp, Object newValue,
-      boolean hasRemoteOrigin, EntryEventImpl cbEvent, boolean invokeCallbacks,
-      boolean cbEventInPending, boolean opCompleted) {
+      boolean hasRemoteOrigin, EntryEventImpl callbackEvent, boolean invokeCallbacks,
+      boolean opCompleted) {
+    boolean result = false;
     // At this point we should only apply the update if the entry exists
     RegionEntry re = getEntry(key); // Fix for bug 32347.
     if (re != null) {
@@ -2843,9 +2802,9 @@ public abstract class AbstractRegionMap
           putOp = putOp.getCorrespondingUpdateOp();
           // Net writers are not called for received transaction data
           final int oldSize = owner.calculateRegionEntryValueSize(re);
-          if (cbEvent != null) {
-            cbEvent.setRegionEntry(re);
-            cbEvent.setOldValue(re.getValueInVM(owner)); // OFFHEAP eei
+          if (callbackEvent != null) {
+            callbackEvent.setRegionEntry(re);
+            callbackEvent.setOldValue(re.getValueInVM(owner)); // OFFHEAP eei
           }
 
           boolean clearOccured = false;
@@ -2863,10 +2822,10 @@ public abstract class AbstractRegionMap
             }
             re.setValueResultOfSearch(putOp.isNetSearch());
             try {
-              processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState);
+              processAndGenerateTXVersionTag(owner, callbackEvent, re, txEntryState);
               {
                 re.setValue(owner,
-                    re.prepareValueForCache(owner, newValue, cbEvent, !putOp.isCreate()));
+                    re.prepareValueForCache(owner, newValue, callbackEvent, !putOp.isCreate()));
               }
               if (putOp.isCreate()) {
                 owner.updateSizeOnCreate(key, owner.calculateRegionEntryValueSize(re));
@@ -2894,8 +2853,8 @@ public abstract class AbstractRegionMap
             }
           }
           if (invokeCallbacks) {
-            cbEventInPending = prepareUpdateCallbacks(pendingCallbacks, owner, hasRemoteOrigin,
-                cbEvent, cbEventInPending);
+            prepareUpdateCallbacks(pendingCallbacks, owner, hasRemoteOrigin, callbackEvent);
+            result = true;
           }
           if (!clearOccured) {
             lruEntryUpdate(re);
@@ -2907,42 +2866,36 @@ public abstract class AbstractRegionMap
       }
     }
     if (invokeCallbacks && !opCompleted) {
-      cbEvent.makeUpdate();
-      owner.invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, cbEvent, false);
+      callbackEvent.makeUpdate();
+      owner.invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, callbackEvent, false);
     }
-    if (owner.getConcurrencyChecksEnabled() && txEntryState != null && cbEvent != null) {
-      txEntryState.setVersionTag(cbEvent.getVersionTag());
+    if (owner.getConcurrencyChecksEnabled() && txEntryState != null && callbackEvent != null) {
+      txEntryState.setVersionTag(callbackEvent.getVersionTag());
     }
-    return cbEventInPending;
+    return result;
   }
 
-  private boolean prepareUpdateCallbacks(List<EntryEventImpl> pendingCallbacks, LocalRegion owner,
-      boolean hasRemoteOrigin, EntryEventImpl cbEvent, boolean cbEventInPending) {
-    cbEvent.makeUpdate();
-    switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin);
-    if (pendingCallbacks == null) {
-      owner.invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, cbEvent, hasRemoteOrigin);
-    } else {
-      pendingCallbacks.add(cbEvent);
-      cbEventInPending = true;
-    }
-    return cbEventInPending;
+  private void prepareUpdateCallbacks(List<EntryEventImpl> pendingCallbacks, LocalRegion owner,
+      boolean hasRemoteOrigin, EntryEventImpl callbackEvent) {
+    callbackEvent.makeUpdate();
+    switchEventOwnerAndOriginRemote(callbackEvent, hasRemoteOrigin);
+    pendingCallbacks.add(callbackEvent);
   }
 
-  private void txHandleWANEvent(final LocalRegion owner, EntryEventImpl cbEvent,
+  private void txHandleWANEvent(final LocalRegion owner, EntryEventImpl callbackEvent,
       TXEntryState txEntryState) {
-    ((BucketRegion) owner).handleWANEvent(cbEvent);
+    ((BucketRegion) owner).handleWANEvent(callbackEvent);
     if (txEntryState != null) {
-      txEntryState.setTailKey(cbEvent.getTailKey());
+      txEntryState.setTailKey(callbackEvent.getTailKey());
     }
   }
 
   /**
    * called from txApply* methods to process and generate versionTags.
    */
-  private void processAndGenerateTXVersionTag(final LocalRegion owner, EntryEventImpl cbEvent,
+  private void processAndGenerateTXVersionTag(final LocalRegion owner, EntryEventImpl callbackEvent,
       RegionEntry re, TXEntryState txEntryState) {
-    if (shouldPerformConcurrencyChecks(owner, cbEvent)) {
+    if (shouldPerformConcurrencyChecks(owner, callbackEvent)) {
       try {
         if (txEntryState != null && txEntryState.getRemoteVersionTag() != null) {
           // to generate a version based on a remote VersionTag, we will
@@ -2953,28 +2906,29 @@ public abstract class AbstractRegionMap
             stamp.setVersions(remoteTag);
           }
         }
-        processVersionTag(re, cbEvent);
+        processVersionTag(re, callbackEvent);
       } catch (ConcurrentCacheModificationException ignore) {
         // ignore this execption, however invoke callbacks for this operation
       }
 
       // For distributed transactions, stuff the next region version generated
-      // in phase-1 commit into the cbEvent so that ARE.generateVersionTag can later
+      // in phase-1 commit into the callbackEvent so that ARE.generateVersionTag can later
       // just apply it and not regenerate it in phase-2 commit
-      if (cbEvent != null && txEntryState != null && txEntryState.getDistTxEntryStates() != null) {
-        cbEvent.setNextRegionVersion(txEntryState.getDistTxEntryStates().getRegionVersion());
+      if (callbackEvent != null && txEntryState != null
+          && txEntryState.getDistTxEntryStates() != null) {
+        callbackEvent.setNextRegionVersion(txEntryState.getDistTxEntryStates().getRegionVersion());
       }
 
-      // cbEvent.setNextRegionVersion(txEntryState.getNextRegionVersion());
-      owner.generateAndSetVersionTag(cbEvent, re);
+      // callbackEvent.setNextRegionVersion(txEntryState.getNextRegionVersion());
+      owner.generateAndSetVersionTag(callbackEvent, re);
     }
   }
 
   /**
-   * Checks for concurrency checks enabled on Region and that cbEvent is not null.
+   * Checks for concurrency checks enabled on Region and that callbackEvent is not null.
    */
-  private boolean shouldPerformConcurrencyChecks(LocalRegion owner, EntryEventImpl cbEvent) {
-    return owner.getConcurrencyChecksEnabled() && cbEvent != null;
+  private boolean shouldPerformConcurrencyChecks(LocalRegion owner, EntryEventImpl callbackEvent) {
+    return owner.getConcurrencyChecksEnabled() && callbackEvent != null;
   }
 
   /**
@@ -3020,7 +2974,7 @@ public abstract class AbstractRegionMap
     }
   }
 
-  static boolean shouldCreateCBEvent(final LocalRegion owner, final boolean isInitialized) {
+  static boolean shouldCreateCallbackEvent(final LocalRegion owner, final boolean isInitialized) {
     LocalRegion lr = owner;
     boolean isPartitioned = lr.isUsedForPartitionedRegionBucket();
 
@@ -3035,18 +2989,18 @@ public abstract class AbstractRegionMap
         || lr.shouldNotifyBridgeClients() || lr.getConcurrencyChecksEnabled());
   }
 
-  EntryEventImpl createCallBackEvent(final LocalRegion re, Operation op, Object key,
+  EntryEventImpl createTransactionCallbackEvent(final LocalRegion re, Operation op, Object key,
       Object newValue, TransactionId txId, TXRmtEvent txEvent, EventID eventId,
       Object aCallbackArgument, FilterRoutingInfo filterRoutingInfo,
       ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,
       long tailKey) {
-    return createCBEvent(re, op, key, newValue, txId, txEvent, eventId, aCallbackArgument,
+    return createCallbackEvent(re, op, key, newValue, txId, txEvent, eventId, aCallbackArgument,
         filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey);
   }
 
   /** create a callback event for applying a transactional change to the local cache */
   @Retained
-  public static EntryEventImpl createCBEvent(final LocalRegion re, Operation op, Object key,
+  public static EntryEventImpl createCallbackEvent(final LocalRegion re, Operation op, Object key,
       Object newValue, TransactionId txId, TXRmtEvent txEvent, EventID eventId,
       Object aCallbackArgument, FilterRoutingInfo filterRoutingInfo,
       ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
index e58faf8..bd3059d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
@@ -271,26 +271,14 @@ class ProxyRegionMap implements RegionMap {
       if (event != null) {
         event.addDestroy(this.owner, markerEntry, key, aCallbackArgument);
       }
-      if (AbstractRegionMap.shouldCreateCBEvent(this.owner, !inTokenMode)) {
+      if (AbstractRegionMap.shouldCreateCallbackEvent(this.owner, !inTokenMode)) {
         // fix for bug 39526
         @Released
-        EntryEventImpl e = AbstractRegionMap.createCBEvent(this.owner, op, key, null, rmtOrigin,
-            event, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState,
-            versionTag, tailKey);
-        boolean cbEventInPending = false;
-        try {
-          AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
-          if (pendingCallbacks == null) {
-            this.owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, e,
-                true/* callDispatchListenerEvent */);
-          } else {
-            pendingCallbacks.add(e);
-            cbEventInPending = true;
-          }
-        } finally {
-          if (!cbEventInPending)
-            e.release();
-        }
+        EntryEventImpl e = AbstractRegionMap.createCallbackEvent(this.owner, op, key, null,
+            rmtOrigin, event, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
+            txEntryState, versionTag, tailKey);
+        AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
+        pendingCallbacks.add(e);
       }
     }
   }
@@ -306,27 +294,15 @@ class ProxyRegionMap implements RegionMap {
       if (event != null) {
         event.addInvalidate(this.owner, markerEntry, key, newValue, aCallbackArgument);
       }
-      if (AbstractRegionMap.shouldCreateCBEvent(this.owner, this.owner.isInitialized())) {
+      if (AbstractRegionMap.shouldCreateCallbackEvent(this.owner, this.owner.isInitialized())) {
         // fix for bug 39526
-        boolean cbEventInPending = false;
         @Released
-        EntryEventImpl e = AbstractRegionMap.createCBEvent(this.owner,
+        EntryEventImpl e = AbstractRegionMap.createCallbackEvent(this.owner,
             localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, key, newValue, rmtOrigin,
             event, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState,
             versionTag, tailKey);
-        try {
-          AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
-          if (pendingCallbacks == null) {
-            this.owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, e,
-                true/* callDispatchListenerEvent */);
-          } else {
-            pendingCallbacks.add(e);
-            cbEventInPending = true;
-          }
-        } finally {
-          if (!cbEventInPending)
-            e.release();
-        }
+        AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
+        pendingCallbacks.add(e);
       }
     }
   }
@@ -344,26 +320,14 @@ class ProxyRegionMap implements RegionMap {
       if (event != null) {
         event.addPut(putOperation, this.owner, markerEntry, key, newValue, aCallbackArgument);
       }
-      if (AbstractRegionMap.shouldCreateCBEvent(this.owner, this.owner.isInitialized())) {
+      if (AbstractRegionMap.shouldCreateCallbackEvent(this.owner, this.owner.isInitialized())) {
         // fix for bug 39526
-        boolean cbEventInPending = false;
         @Released
-        EntryEventImpl e = AbstractRegionMap.createCBEvent(this.owner, putOperation, key, newValue,
-            rmtOrigin, event, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext,
-            txEntryState, versionTag, tailKey);
-        try {
-          AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
-          if (pendingCallbacks == null) {
-            this.owner.invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, e,
-                true/* callDispatchListenerEvent */);
-          } else {
-            pendingCallbacks.add(e);
-            cbEventInPending = true;
-          }
-        } finally {
-          if (!cbEventInPending)
-            e.release();
-        }
+        EntryEventImpl e = AbstractRegionMap.createCallbackEvent(this.owner, putOperation, key,
+            newValue, rmtOrigin, event, eventId, aCallbackArgument, filterRoutingInfo,
+            bridgeContext, txEntryState, versionTag, tailKey);
+        AbstractRegionMap.switchEventOwnerAndOriginRemote(e, txEntryState == null);
+        pendingCallbacks.add(e);
       }
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
index 98b1f2e..766cbd6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
@@ -1241,7 +1241,7 @@ public class TXCommitMessage extends PooledDistributionMessage
          */
         // No need to release because it is added to pendingCallbacks and they will be released
         // later
-        EntryEventImpl eei = AbstractRegionMap.createCBEvent(this.r, entryOp.op, entryOp.key,
+        EntryEventImpl eei = AbstractRegionMap.createCallbackEvent(this.r, entryOp.op, entryOp.key,
             entryOp.value, this.msg.txIdent, txEvent, getEventId(entryOp), entryOp.callbackArg,
             entryOp.filterRoutingInfo, this.msg.bridgeContext, null, entryOp.versionTag,
             entryOp.tailKey);
@@ -1316,7 +1316,7 @@ public class TXCommitMessage extends PooledDistributionMessage
          * This happens when we don't have the bucket and are getting adjunct notification
          */
         @Released
-        EntryEventImpl eei = AbstractRegionMap.createCBEvent(this.r, entryOp.op, entryOp.key,
+        EntryEventImpl eei = AbstractRegionMap.createCallbackEvent(this.r, entryOp.op, entryOp.key,
             entryOp.value, this.msg.txIdent, txEvent, getEventId(entryOp), entryOp.callbackArg,
             entryOp.filterRoutingInfo, this.msg.bridgeContext, null, entryOp.versionTag,
             entryOp.tailKey);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
index 2e7baaa..86fb15f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
@@ -705,7 +705,7 @@ public class AbstractRegionMapTest {
     Object newValue = "value";
     arm.txApplyPut(Operation.CREATE, KEY, newValue, false,
         new TXId(mock(InternalDistributedMember.class), 1), mock(TXRmtEvent.class),
-        mock(EventID.class), null, null, null, null, null, null, 1);
+        mock(EventID.class), null, new ArrayList<EntryEventImpl>(), null, null, null, null, 1);
     RegionEntry re = arm.getEntry(KEY);
     assertNotNull(re);
 
@@ -741,7 +741,7 @@ public class AbstractRegionMapTest {
     re.setValue(arm._getOwner(), token);
     arm.txApplyInvalidate(key, Token.INVALID, false,
         new TXId(mock(InternalDistributedMember.class), 1), mock(TXRmtEvent.class), false,
-        mock(EventID.class), null, null, null, null, null, null, 1);
+        mock(EventID.class), null, new ArrayList<EntryEventImpl>(), null, null, null, null, 1);
     assertEquals(re.getValueAsToken(), token);
   }
 
@@ -1105,7 +1105,7 @@ public class AbstractRegionMapTest {
     }
 
     @Override
-    EntryEventImpl createCallBackEvent(final LocalRegion re, Operation op, Object key,
+    EntryEventImpl createTransactionCallbackEvent(final LocalRegion re, Operation op, Object key,
         Object newValue, TransactionId txId, TXRmtEvent txEvent, EventID eventId,
         Object aCallbackArgument, FilterRoutingInfo filterRoutingInfo,
         ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,
@@ -1131,7 +1131,7 @@ public class AbstractRegionMapTest {
     }
 
     @Override
-    EntryEventImpl createCallBackEvent(final LocalRegion re, Operation op, Object key,
+    EntryEventImpl createTransactionCallbackEvent(final LocalRegion re, Operation op, Object key,
         Object newValue, TransactionId txId, TXRmtEvent txEvent, EventID eventId,
         Object aCallbackArgument, FilterRoutingInfo filterRoutingInfo,
         ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag,

-- 
To stop receiving notification emails like this one, please contact
dschneider@apache.org.