albertogpz opened a new pull request #6478:
URL: https://github.com/apache/geode/pull/6478


   …on-events
   
   When group-transaction-events is set to true
   the SerialGatewaySenderQueue class stores those events
   peeked from the queue to complete transactions
   for a batch inside the extraPeekedIds member. This is done
   so that, when new events are peeked from the queue
   by peekAhead() to be put in a batch, the
   events in extraPeekedIds are skipped. Otherwise
   those events will be sent several times.
   When the remove method of SerialGatewaySenderQueue
   is called, the peekedIds member and the head key
   of the queue are updated and events from extraPeekedIds
   are removed if necessary.
   Given that the peekAhead() method first gets the
   currentKey (that depends on the peekedIds and the headkey)
   and then checks if the event to be removed is in extraPeekedIds,
   it could be that in between those two calls,
   remove() is called from another thread, causing that
   peekAhead() returns an event that
   belonged to extraPeekedIds when the currentKey was
   obtained but was deleted from extraPeekedIds by remove()
   before it was checked that the event belonged to
   extraPeekedIds.
   This provokes that an event already peeked is returned
   again by peekAhead() leading to duplicate events
   sent by the gateway sender.
   
   The solution proposed to solve this problem is to make
   synchronized the peekAhead() function when group-transaction-events
   is set given that remove() is already synchronized. This will
   prevent the race condition described above.
   
   Thank you for submitting a contribution to Apache Geode.
   
   In order to streamline the review of the contribution we ask you
   to ensure the following steps have been taken:
   
   ### For all changes:
   - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in 
the commit message?
   
   - [ ] Has your PR been rebased against the latest commit within the target 
branch (typically `develop`)?
   
   - [ ] Is your initial contribution a single, squashed commit?
   
   - [ ] Does `gradlew build` run cleanly?
   
   - [ ] Have you written or updated unit tests to verify your changes?
   
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)?
   
   ### Note:
   Please ensure that once the PR is submitted, check Concourse for build 
issues and
   submit an update to your PR as soon as possible. If you need help, please 
send an
   email to d...@geode.apache.org.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to