geode-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Barry Oglesby (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (GEODE-3030) The possibleDuplicate boolean may not be set to true in previously processed AEQ events
Date Fri, 28 Jul 2017 19:48:00 GMT

     [ https://issues.apache.org/jira/browse/GEODE-3030?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Barry Oglesby resolved GEODE-3030.
----------------------------------
       Resolution: Fixed
         Assignee: Barry Oglesby  (was: Dan Smith)
    Fix Version/s: 1.3.0

> 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)

Mime
View raw message