You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2017/11/14 19:44:14 UTC

[geode] branch feature/GEM-883 updated (9c29ebe -> 2a7e453)

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

zhouxj pushed a change to branch feature/GEM-883
in repository https://gitbox.apache.org/repos/asf/geode.git.


    omit 9c29ebe  GEODE-3967: if put hits concurrent modification exception should still notify serial gateway sender
     add 36408b7  GEODE-3872: simplify the Command result Assert (#1043)
     add e67456d  GEODE-3539: cleanup GfshCommand and refactor tests
     add 36a1165  Revert "GEODE-3592: remove getAnyInstance call (#1026)"
     add 576bf71  GEODE-3539: rename GfshShellConnectionRule to GfshCommandRule (#1051)
     add abb39cf  GEODE-3970: Adjust default Travis _JAVA_OPTIONS (#1049)
     add bd523c3  GEODE-3951: PULSE Logout exception when using the defaults. (#1041)
     add 141c793  GEODE-2565: add if-exists option to DestoryGatewaySenderCommand (#1048)
     add ae03b84  GEODE-3973: have the cluster configuration start synchronously when starting a locator (#1050)
     add 9ebc4f7  Fix for GEODE-3898: Defined Indexes are not Persisted in Cluster Configuration. (#1022)
     add 1b985b0  GEODE-3898: fix merge conflict
     add 69143c1  GEODE-3961: Refactor ShowMetricsCommand to handle --categories uniformly
     add 7fae1a1  GEODE-3961: Correct test after bad rebase.
     new 2a7e453  GEODE-3967: if put hits concurrent modification exception should still notify serial gateway sender

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (9c29ebe)
            \
             N -- N -- N   refs/heads/feature/GEM-883 (2a7e453)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml                                        |    4 +
 .../StartLocatorCommandIntegrationTest.java        |    6 +-
 .../StartServerCommandIntegrationTest.java         |    6 +-
 .../session/tests/TomcatClientServerTest.java      |    4 +-
 .../TomcatSessionBackwardsCompatibilityTest.java   |    4 +-
 .../distributed/internal/InternalLocator.java      |   80 +-
 .../geode/management/internal/cli/GfshParser.java  |    2 +-
 .../cli/commands/CreateDefinedIndexesCommand.java  |   27 +-
 .../cli/commands/DescribeDiskStoreCommand.java     |   42 +-
 .../cli/commands/DestroyGatewaySenderCommand.java  |   57 +-
 .../cli/commands/DestroyRegionCommand.java         |   55 +-
 .../internal/cli/commands/ExportLogsCommand.java   |   20 +-
 .../internal/cli/commands/GfshCommand.java         |   85 +-
 .../cli/commands/ListDiskStoresCommand.java        |   23 +-
 .../internal/cli/commands/ListIndexCommand.java    |   18 +-
 .../internal/cli/commands/ShowMetricsCommand.java  | 1456 ++++++++------------
 .../cli/commands/ShowMetricsInterceptor.java       |  107 ++
 .../internal/cli/commands/StartLocatorCommand.java |  344 +++--
 .../internal/cli/commands/StartServerCommand.java  |  388 +++---
 .../commands/lifecycle/StartJConsoleCommand.java   |    2 +-
 .../commands/lifecycle/StartJVisualVMCommand.java  |    2 +-
 .../cli/commands/lifecycle/StartPulseCommand.java  |    2 +-
 .../cli/commands/lifecycle/StartVsdCommand.java    |    2 +-
 .../commands/lifecycle/StatusLocatorCommand.java   |   63 +-
 .../commands/lifecycle/StatusServerCommand.java    |   68 +-
 .../cli/commands/lifecycle/StopLocatorCommand.java |  107 +-
 .../cli/commands/lifecycle/StopServerCommand.java  |  101 +-
 ...Exception.java => EntityNotFoundException.java} |   32 +-
 .../cli/exceptions/IndexNotFoundException.java     |   33 -
 .../internal/cli/functions/CliFunctionResult.java  |   14 +
 .../functions/CreateDefinedIndexesFunction.java    |   83 +-
 .../cli/functions/DescribeDiskStoreFunction.java   |    4 +-
 .../functions/GatewaySenderDestroyFunction.java    |   58 +-
 .../GatewaySenderDestroyFunctionArgs.java          |    8 +-
 .../cli/functions/RegionCreateFunction.java        |    3 +-
 .../cli/functions/RegionDestroyFunction.java       |   47 +-
 .../management/internal/cli/i18n/CliStrings.java   |    7 +-
 .../internal/cli/remote/CommandExecutor.java       |   37 +-
 .../cli/util/DiskStoreNotFoundException.java       |   47 -
 .../internal/cli/util/MemberNotFoundException.java |   47 -
 .../geode/internal/cache/CommitFunction.java       |    3 +-
 .../ExtensionClusterConfigurationDUnitTest.java    |    4 +-
 .../geode/internal/cache/ha/Bug48571DUnitTest.java |   96 +-
 .../management/internal/cli/CliUtilDUnitTest.java  |    4 +-
 .../management/internal/cli/NetstatDUnitTest.java  |   16 +-
 .../AlterRegionCommandIntegrationTest.java         |    6 +-
 .../commands/ChangeLogLevelCommandDUnitTest.java   |    8 +-
 .../cli/commands/ConcurrentDeployDUnitTest.java    |    8 +-
 .../CreateDefinedIndexesCommandDUnitTest.java      |  218 +++
 .../commands/CreateDefinedIndexesCommandTest.java  |  166 +++
 .../cli/commands/CreateRegionCommandDUnitTest.java |    4 +-
 .../CreateRegionCommandIntegrationTest.java        |    6 +-
 ...DeployCommandFunctionRegistrationDUnitTest.java |    4 +-
 .../commands/DeployCommandRedeployDUnitTest.java   |    4 +-
 .../cli/commands/DeployWithGroupsDUnitTest.java    |    4 +-
 .../DescribeConfigCommandIntegrationTest.java      |    7 +-
 .../commands/DescribeMembersCommandDUnitTest.java  |    4 +-
 .../commands/DestroyGatewaySenderCommandTest.java  |  108 ++
 .../commands/DestroyIndexCommandsDUnitTest.java    |    4 +-
 .../commands/DestroyRegionCommandDUnitTest.java    |   14 +-
 .../cli/commands/DestroyRegionCommandTest.java     |   86 +-
 .../cli/commands/DiskStoreCommandsJUnitTest.java   |   10 +-
 .../ExecuteFunctionCommandSecurityTest.java        |   28 +-
 .../cli/commands/ExportDataIntegrationTest.java    |    7 +-
 .../cli/commands/ExportLogsCommandTest.java        |   11 +-
 .../internal/cli/commands/ExportLogsDUnitTest.java |    4 +-
 .../cli/commands/ExportLogsIntegrationTest.java    |    4 +-
 .../commands/ExportLogsOnServerManagerDUnit.java   |    9 +-
 .../cli/commands/ExportLogsStatsDUnitTest.java     |    4 +-
 .../ExportLogsWithMemberGroupDUnitTest.java        |    4 +-
 .../cli/commands/FunctionCommandsDUnitTest.java    |    6 +-
 .../internal/cli/commands/GcCommandDUnitTest.java  |    8 +-
 .../cli/commands/GetCommandIntegrationTest.java    |    6 +-
 .../cli/commands/GfshCommandIntegrationTest.java   |    6 +-
 .../cli/commands/GfshCommandJUnitTest.java         |  454 +-----
 .../cli/commands/ImportDataIntegrationTest.java    |    7 +-
 .../cli/commands/IndexCommandsIntegrationTest.java |    6 +-
 .../IndexCommandsShareConfigurationDUnitTest.java  |    6 +-
 .../ListAndDescribeDiskStoreCommandsDUnitTest.java |    6 +-
 .../commands/ListAndDescribeRegionDUnitTest.java   |   30 +-
 .../cli/commands/ListIndexCommandDUnitTest.java    |    6 +-
 .../cli/commands/ListMembersCommandDUnitTest.java  |    4 +-
 .../cli/commands/LocateEntryDUnitTest.java         |    4 +-
 .../cli/commands/PutCommandIntegrationTest.java    |    6 +-
 .../internal/cli/commands/QueryCommandTest.java    |    9 +-
 .../cli/commands/RemoveCommandDUnitTest.java       |    4 +-
 .../cli/commands/RemoveCommandJsonDUnitTest.java   |    4 +-
 .../cli/commands/ShowDeadlockDUnitTest.java        |    4 +-
 .../cli/commands/ShowLogCommandDUnitTest.java      |    8 +-
 .../ShowMetricsCommandIntegrationTest.java         |  171 +++
 .../cli/commands/ShowMetricsDUnitTest.java         |    8 +-
 ...andJUnitTest.java => ShowMetricsJUnitTest.java} |    8 +-
 .../commands/ShowMissingDiskStoresDUnitTest.java   |    8 +-
 .../cli/commands/ShutdownCommandDUnitTest.java     |    8 +-
 .../cli/commands/VersionCommandJUnitTest.java      |    4 +-
 .../GfshStatusCommandsIntegrationTest.java         |    4 +-
 .../CliFunctionResultTest.java}                    |   22 +-
 .../CreateDefinedIndexesFunctionTest.java          |  226 +++
 .../DescribeDiskStoreFunctionJUnitTest.java        |   14 +-
 .../GatewaySenderDestroyFunctionTest.java          |   87 ++
 .../cli/functions/RegionDestroyFunctionTest.java   |   97 ++
 .../internal/cli/remote/CommandExecutorTest.java   |   79 +-
 .../cli/shell/GfshMultilineCommandTest.java        |    6 +-
 .../ClusterConfigDeployJarDUnitTest.java           |    4 +-
 .../ClusterConfigDistributionDUnitTest.java        |    4 +-
 .../ClusterConfigImportDUnitTest.java              |    4 +-
 .../ClusterConfigWithSecurityDUnitTest.java        |    4 +-
 .../ImportClusterConfigDistributedTest.java        |    4 +-
 .../ImportOldClusterConfigDUnitTest.java           |    4 +-
 .../security/GfshCommandsPostProcessorTest.java    |    7 +-
 .../security/GfshCommandsSecurityTest.java         |    6 +-
 .../internal/security/MultiUserDUnitTest.java      |   10 +-
 .../PDXGfshPostProcessorOnRemoteServerTest.java    |    6 +-
 .../geode/security/PDXPostProcessorDUnitTest.java  |    8 +-
 .../java/org/apache/geode/test/fake/Fakes.java     |    2 +
 ...ionRuleAssert.java => CommandResultAssert.java} |   86 +-
 ...eExecution.java => CommandResultExecution.java} |   19 +-
 ...ellConnectionRule.java => GfshCommandRule.java} |   16 +-
 .../geode/test/junit/rules/GfshParserRule.java     |    6 +
 .../apache/geode/codeAnalysis/excludedClasses.txt  |  215 +--
 .../geode/codeAnalysis/sanctionedSerializables.txt |    7 +-
 .../cli/commands/golden-help-offline.properties    |   10 +-
 .../lucene/internal/cli/LuceneIndexCommands.java   |   78 +-
 .../lucene/LuceneCommandsSecurityDUnitTest.java    |   28 +-
 .../internal/cli/LuceneIndexCommandsDUnitTest.java |   15 +-
 .../LuceneClusterConfigurationDUnitTest.java       |    4 +-
 .../pulse/internal/security/LogoutHandler.java     |   11 +-
 .../internal/security/LogoutHandlerUnitTest.java   |  103 ++
 ...teAndDestroyGatewaySenderCommandsDUnitTest.java |    4 +-
 .../CreateGatewayReceiverCommandDUnitTest.java     |    4 +-
 .../CreateGatewaySenderCommandDUnitTest.java       |    4 +-
 .../DestroyGatewaySenderCommandDUnitTest.java      |   69 +-
 .../PauseGatewaySenderCommandDUnitTest.java        |    4 +-
 .../ResumeGatewaySenderCommandDUnitTest.java       |    4 +-
 .../StartGatewayReceiverCommandDUnitTest.java      |    4 +-
 .../StartGatewaySenderCommandDUnitTest.java        |    4 +-
 .../StatusGatewayReceiverCommandDUnitTest.java     |    4 +-
 .../StatusGatewaySenderCommandDUnitTest.java       |    4 +-
 .../StopGatewayReceiverCommandDUnitTest.java       |    4 +-
 .../StopGatewaySenderCommandDUnitTest.java         |    4 +-
 .../wan/wancommand/WanCommandListDUnitTest.java    |    4 +-
 ...rConfigurationIndexWithFromClauseDUnitTest.java |   16 +-
 .../WANClusterConfigurationDUnitTest.java          |    4 +-
 .../cli/commands/AlterRuntimeCommandDUnitTest.java |  112 +-
 .../commands/ClusterConfigurationDUnitTest.java    |    6 +-
 .../internal/cli/commands/CommandOverHttpTest.java |    6 +-
 .../commands/ConnectCommandIntegrationTest.java    |    8 +-
 .../cli/commands/ConnectCommandWithSSLTest.java    |   70 +-
 .../commands/ConnectCommandWithSecurityTest.java   |   14 +-
 .../commands/DescribeConfigCommandDUnitTest.java   |    8 +-
 ...xecuteFunctionCommandWithSecurityDUnitTest.java |    8 +-
 .../cli/commands/ExportConfigCommandDUnitTest.java |    8 +-
 .../ExportLogsOverHttpIntegrationTest.java         |    4 +-
 .../commands/ExportLogsStatsOverHttpDUnitTest.java |    4 +-
 .../FunctionCommandsOverHttpDUnitTest.java         |    4 +-
 .../cli/commands/IndexCommandOverHttpTest.java     |    4 +-
 .../ListIndexCommandOverHttpDUnitTest.java         |    4 +-
 .../security/GfshCommandsOverHttpSecurityTest.java |    5 +-
 .../internal/security/LogNoPasswordTest.java       |    6 +-
 .../HttpOperationInvokerMBeanOperationTest.java    |    6 +-
 .../shell/HttpOperationInvokerSecurityTest.java    |   12 +-
 161 files changed, 3604 insertions(+), 3159 deletions(-)
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsInterceptor.java
 rename geode-core/src/main/java/org/apache/geode/management/internal/cli/exceptions/{CreateSubregionException.java => EntityNotFoundException.java} (63%)
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/exceptions/IndexNotFoundException.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/util/DiskStoreNotFoundException.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/util/MemberNotFoundException.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDefinedIndexesCommandDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateDefinedIndexesCommandTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandIntegrationTest.java
 rename geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/{ShowMetricsCommandJUnitTest.java => ShowMetricsJUnitTest.java} (92%)
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/{commands/ExportDataCommandTest.java => functions/CliFunctionResultTest.java} (61%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunctionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
 rename geode-core/src/test/java/org/apache/geode/test/junit/assertions/{GfshShellConnectionRuleAssert.java => CommandResultAssert.java} (68%)
 rename geode-core/src/test/java/org/apache/geode/test/junit/assertions/{GfshShellConnectionRuleExecution.java => CommandResultExecution.java} (71%)
 rename geode-core/src/test/java/org/apache/geode/test/junit/rules/{GfshShellConnectionRule.java => GfshCommandRule.java} (93%)
 create mode 100644 geode-pulse/src/test/java/org/apache/geode/tools/pulse/internal/security/LogoutHandlerUnitTest.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].

[geode] 01/01: GEODE-3967: if put hits concurrent modification exception should still notify serial gateway sender

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEM-883
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 2a7e453c110c33a43f18b88c7fbd77c12ecb1e06
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Thu Nov 9 23:49:29 2017 -0800

    GEODE-3967: if put hits concurrent modification exception should still notify serial gateway sender
---
 .../geode/internal/cache/DistributedCacheOperation.java  | 13 +++++++++++++
 .../org/apache/geode/internal/cache/LocalRegion.java     | 16 +++++++++++-----
 .../cache/wan/AbstractGatewaySenderEventProcessor.java   |  8 ++++++++
 .../geode/internal/cache/wan/GatewaySenderEventImpl.java |  3 +++
 .../wan/serial/SerialGatewaySenderEventProcessor.java    |  2 +-
 5 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
index 505c618..aa793f8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
@@ -1295,6 +1295,19 @@ public abstract class DistributedCacheOperation {
       ev.isConcurrencyConflict(true);
       rgn.generateLocalFilterRouting(ev);
       rgn.notifyBridgeClients(ev);
+      rgn.notifyGatewaySender(getOperation(ev), ev);
+    }
+
+    private EnumListenerEvent getOperation(EntryEventImpl ev) {
+      if (ev.getOperation().isInvalidate()) {
+        return EnumListenerEvent.AFTER_INVALIDATE;
+      } else if (ev.getOperation().isDestroy()) {
+        return EnumListenerEvent.AFTER_DESTROY;
+      } else if (ev.getOperation().isUpdate()) {
+        return EnumListenerEvent.AFTER_UPDATE;
+      } else {
+        return EnumListenerEvent.AFTER_CREATE;
+      }
     }
 
     protected abstract InternalCacheEvent createEvent(DistributedRegion rgn)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
index bed336a..158ff68 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
@@ -2851,6 +2851,8 @@ public class LocalRegion extends AbstractRegion implements InternalRegion, Loade
               logger.debug("caught concurrent modification attempt when applying {}", event);
             }
             notifyBridgeClients(event);
+            notifyGatewaySender(event.getOperation().isUpdate() ? EnumListenerEvent.AFTER_UPDATE
+                : EnumListenerEvent.AFTER_CREATE, event);
           }
           if (!getDataView().isDeferredStats()) {
             getCachePerfStats().endPut(startPut, event.isOriginRemote());
@@ -5624,6 +5626,9 @@ public class LocalRegion extends AbstractRegion implements InternalRegion, Loade
         logger.debug("caught concurrent modification attempt when applying {}", event);
       }
       notifyBridgeClients(event);
+      notifyGatewaySender(event.getOperation().isUpdate() ? EnumListenerEvent.AFTER_UPDATE
+          : EnumListenerEvent.AFTER_CREATE, event);
+
       return false;
     }
 
@@ -6111,8 +6116,7 @@ public class LocalRegion extends AbstractRegion implements InternalRegion, Loade
   }
 
   protected void notifyGatewaySender(EnumListenerEvent operation, EntryEventImpl event) {
-    if (isPdxTypesRegion() || event.isConcurrencyConflict()) {
-      // isConcurrencyConflict is usually a concurrent cache modification problem
+    if (isPdxTypesRegion()) {
       return;
     }
 
@@ -6136,9 +6140,10 @@ public class LocalRegion extends AbstractRegion implements InternalRegion, Loade
     if (allRemoteDSIds != null) {
       for (GatewaySender sender : getCache().getAllGatewaySenders()) {
         if (allGatewaySenderIds.contains(sender.getId())) {
-          // TODO: This is a BUG. Why return and not continue?
-          if (!this.getDataPolicy().withStorage() && sender.isParallel()) {
-            return;
+          // if isConcurrencyConflict is true, only notify serial gateway sender
+          if ((!this.getDataPolicy().withStorage() || event.isConcurrencyConflict())
+              && sender.isParallel()) {
+            continue;
           }
           if (logger.isDebugEnabled()) {
             logger.debug("Notifying the GatewaySender : {}", sender.getId());
@@ -6497,6 +6502,7 @@ public class LocalRegion extends AbstractRegion implements InternalRegion, Loade
       if (event.getVersionTag() != null && !event.getVersionTag().isGatewayTag()) {
         notifyBridgeClients(event);
       }
+      notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event);
       return true; // event was elided
 
     } catch (DiskAccessException dae) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
index 7a2cee1..f94c21d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
@@ -528,6 +528,14 @@ public abstract class AbstractGatewaySenderEventProcessor extends Thread {
                 statistics.incEventsNotQueued();
                 continue;
               }
+              if (((GatewaySenderEventImpl) event).isConcurrencyConflict) {
+                if (isDebugEnabled) {
+                  logger.debug("primary should ignore the concurrency conflict event:" + event);
+                }
+                itr.remove();
+                statistics.incEventsNotQueued();
+                continue;
+              }
 
               boolean transmit = filter.beforeTransmit(event);
               if (!transmit) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
index 4d201b2..d28dc5b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
@@ -175,6 +175,8 @@ public class GatewaySenderEventImpl
 
   protected boolean isInitialized;
 
+  public boolean isConcurrencyConflict = false;
+
   /**
    * Is this thread in the process of serializing this event?
    */
@@ -316,6 +318,7 @@ public class GatewaySenderEventImpl
     if (initialize) {
       initialize();
     }
+    this.isConcurrencyConflict = event.isConcurrencyConflict();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java
index 734b560..e9c4d28 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java
@@ -712,7 +712,7 @@ public class SerialGatewaySenderEventProcessor extends AbstractGatewaySenderEven
       // now we can safely use the unprocessedEvents field
       Long v = this.unprocessedTokens.remove(gatewayEvent.getEventId());
 
-      if (v == null) {
+      if (v == null && !gatewayEvent.isConcurrencyConflict) {
         // first time for the event
         if (logger.isTraceEnabled()) {
           logger.trace("{}: fromSecondary event {}:{}->{} added from unprocessed events map",

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.