GEODE-2683: let BR.putAll/removeAll to distribute before notify gateway, which is the same order as put/destroy
Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/e26799ad Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/e26799ad Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/e26799ad Branch: refs/heads/feature/GEODE-2420 Commit: e26799ad4661cd869616db3fa87b50a4cb02b366 Parents: 9ade1d3 Author: zhouxh <gz...@pivotal.io> Authored: Fri Mar 17 14:37:10 2017 -0700 Committer: Ken Howe <kh...@pivotal.io> Committed: Mon Mar 27 14:00:41 2017 -0700 ---------------------------------------------------------------------- .../geode/internal/cache/LocalRegion.java | 39 ++++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/e26799ad/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java ---------------------------------------------------------------------- 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 5d5c7e2..45540ee 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 @@ -5908,8 +5908,15 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory, doCallback = true; } if (doCallback) { - notifyGatewaySender(event.getOperation().isUpdate() ? EnumListenerEvent.AFTER_UPDATE - : EnumListenerEvent.AFTER_CREATE, event); + if (event.isBulkOpInProgress() && this.isUsedForPartitionedRegionBucket) { + if (logger.isDebugEnabled()) { + logger.debug( + "For bulk operation on bucket region, not to notify gateway sender earlier."); + } + } else { + notifyGatewaySender(event.getOperation().isUpdate() ? EnumListenerEvent.AFTER_UPDATE + : EnumListenerEvent.AFTER_CREATE, event); + } // Notify listeners if (!event.isBulkOpInProgress()) { try { @@ -6968,7 +6975,13 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory, * throw new IndexMaintenanceException(e); } } } */ - notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event); + if (event.isBulkOpInProgress() && this.isUsedForPartitionedRegionBucket) { + if (logger.isDebugEnabled()) { + logger.debug("For bulk operation on bucket region, not to notify gateway sender earlier."); + } + } else { + notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event); + } // invoke callbacks if initialized and told to do so, or if this // is a bucket in a partitioned region @@ -10406,10 +10419,12 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory, EnumListenerEvent op = event.getOperation().isCreate() ? EnumListenerEvent.AFTER_CREATE : EnumListenerEvent.AFTER_UPDATE; invokePutCallbacks(op, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), - false /* - * We must notify gateways inside RegionEntry lock, NOT here, to preserve the - * order of events sent by gateways for same key - */); + this.isUsedForPartitionedRegionBucket + /* + * If this is replicated region, use "false". We must notify gateways inside RegionEntry + * lock, NOT here, to preserve the order of events sent by gateways for same key. If this is + * bucket region, use "true", because the event order is guaranteed + */); } } } @@ -10433,10 +10448,12 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory, if (successfulKeys.contains(event.getKey())) { invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), - false /* - * We must notify gateways inside RegionEntry lock, NOT here, to preserve the - * order of events sent by gateways for same key - */); + this.isUsedForPartitionedRegionBucket + /* + * If this is replicated region, use "false". We must notify gateways inside RegionEntry + * lock, NOT here, to preserve the order of events sent by gateways for same key. If this is + * bucket region, use "true", because the event order is guaranteed + */); } } }