[ https://issues.apache.org/jira/browse/GEODE-3030?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16107490#comment-16107490 ]
ASF subversion and git services commented on GEODE-3030: -------------------------------------------------------- Commit 5ec4069848a0ec48466240c17003b8f25fe2fcdd in geode's branch refs/heads/feature/GEODE-3322 from [~barry.oglesby] [ https://git-wip-us.apache.org/repos/asf?p=geode.git;h=5ec4069 ] GEODE-3030: Set possibleDuplicate=true for all bucket events after failover > The possibleDuplicate boolean may not be set to true in previously processed > AEQ events > --------------------------------------------------------------------------------------- > > Key: GEODE-3030 > URL: https://issues.apache.org/jira/browse/GEODE-3030 > Project: Geode > Issue Type: Bug > Components: wan > Reporter: Barry Oglesby > Assignee: Barry Oglesby > Fix For: 1.3.0 > > > When a secondary bucket becomes primary, it sets possibleDuplicate=true for > batchSize events in AbstractBucketRegionQueue.markEventsAsDuplicate: > {noformat} > java.lang.Exception: Stack trace > at java.lang.Thread.dumpStack(Thread.java:1329) > at > com.gemstone.gemfire.internal.cache.AbstractBucketRegionQueue.markEventsAsDuplicate(AbstractBucketRegionQueue.java:329) > at > com.gemstone.gemfire.internal.cache.BucketRegionQueue.beforeAcquiringPrimaryState(BucketRegionQueue.java:203) > at > com.gemstone.gemfire.internal.cache.BucketAdvisor.acquiredPrimaryLock(BucketAdvisor.java:1257) > at > com.gemstone.gemfire.internal.cache.BucketAdvisor.acquirePrimaryRecursivelyForColocated(BucketAdvisor.java:1397) > at > com.gemstone.gemfire.internal.cache.BucketAdvisor$VolunteeringDelegate.doVolunteerForPrimary(BucketAdvisor.java:2695) > at > com.gemstone.gemfire.internal.cache.BucketAdvisor$VolunteeringDelegate$1.run(BucketAdvisor.java:2575) > at > com.gemstone.gemfire.internal.cache.BucketAdvisor$VolunteeringDelegate$2.run(BucketAdvisor.java:2908) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > com.gemstone.gemfire.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:692) > at > com.gemstone.gemfire.distributed.internal.DistributionManager$6$1.run(DistributionManager.java:1029) > at java.lang.Thread.run(Thread.java:745) > {noformat} > In my test case, the batch size is 1 so possibleDuplicate is set to true for > only 1 event in each bucket. It is not set for the remaining events in the > bucket. > The ParallelQueueRemovalMessage is sent asynchronously from remote members so > more than 1 batch of events could have been processed between message sends. > So, possibleDuplicate should be set to true for more than batchSize events > (possibly all of them). > Here is an example from my test. > Server 1 is primary for bucket 5 and is stopped. Server 2 takes over primary > for bucket 5. > {noformat} > Server 1 > -------- > Server 1 processed 3 events from bucket 5 right before it was stopped: > TestGatewayEventListener processed 51427367-8d36-4425-aa02-e44c54774543 > TestGatewayEventListener processed a1af3501-9030-460d-86cc-fe5b88bd5b0a > TestGatewayEventListener processed c1db3ec2-4dad-4444-9ea7-11bd34e492ec > No ParallelQueueRemovalMessage was sent to the remote nodes before the member > was stopped. > Server 2 > -------- > Server 2 took over primary for bucket 5 and processed those same 3 events - > one with possibleDuplicate=true, the others with possibleDuplicate=false. In > all three cases a SQLIntegrityConstraintViolationException was thrown since > the event had already been processed by the previous primary server. > TestGatewayEventListener caught EXPECTED exception > eventKey=51427367-8d36-4425-aa02-e44c54774543; operation=CREATE; > possibleDuplicate=true; > exception=java.sql.SQLIntegrityConstraintViolationException: The statement > was aborted because it would have caused a duplicate key value in a unique or > primary key constraint or unique index identified by 'SQL170601145521130' > defined on 'TRADES'. > TestGatewayEventListener caught UNEXPECTED exception > eventKey=a1af3501-9030-460d-86cc-fe5b88bd5b0a; operation=CREATE; > possibleDuplicate=false; > exception=java.sql.SQLIntegrityConstraintViolationException: The statement > was aborted because it would have caused a duplicate key value in a unique or > primary key constraint or unique index identified by 'SQL170601145521130' > defined on 'TRADES'. > TestGatewayEventListener caught UNEXPECTED exception > eventKey=c1db3ec2-4dad-4444-9ea7-11bd34e492ec; operation=CREATE; > possibleDuplicate=false; > exception=java.sql.SQLIntegrityConstraintViolationException: The statement > was aborted because it would have caused a duplicate key value in a unique or > primary key constraint or unique index identified by 'SQL170601145521130' > defined on 'TRADES'. > AbstractBucketRegionQueue.markEventsAsDuplicate set possibleDuplicate=true > for 51427367-8d36-4425-aa02-e44c54774543, but not for the other events: > AbstractBucketRegionQueue.markEventsAsDuplicate marking posDup > eventKey=51427367-8d36-4425-aa02-e44c54774543 > AbstractBucketRegionQueue.markEventsAsDuplicate not marking posDup > eventKey=a1af3501-9030-460d-86cc-fe5b88bd5b0a > AbstractBucketRegionQueue.markEventsAsDuplicate not marking posDup > eventKey=c1db3ec2-4dad-4444-9ea7-11bd34e492ec > {noformat} -- This message was sent by Atlassian JIRA (v6.4.14#64029)