xiaojian zhou created GEODE-5729:
------------------------------------

             Summary: when DistributedCacheOperation needs 2 messages, should 
let the notifyOnly message to trigger callback
                 Key: GEODE-5729
                 URL: https://issues.apache.org/jira/browse/GEODE-5729
             Project: Geode
          Issue Type: Bug
            Reporter: xiaojian zhou


When one of the secondary bucket is still initializing (in middle of GII), the 
primary member call adviseRequiresTwoMessages() will return not null, i.e. 
PutAll will send both PutAllMessage and PutAllPRMessage(notifyOnly==true) to 
that member.

Then it might cause to send the same event 2 times to the secondary serial 
gateway queue. There's race that the primary serial gateway queue finished 
processing the event before one of (or all of) the 2 duplicated events at 
secondary serial gateway queue, the one was enqueued after the processing 
primary event will be replayed.

When considering the fix, we have to keep the twoMessage design, and we cannot 
guarantee that when the PutAllPRMessage(notifyOnly==true) is sent, the 
secondary bucket will be ready.

I find a work around:

The reason we need to send both PutAllMessage and PutAllPRMessage to the member 
is: we need the PutAllMessage to do apply distribution if region is ready, and 
also trigger call back if region is ready. But the PutAllPRMessage will trigger 
callbacks anyway even region is not ready
So when I detect there're overlap in the 2 sets of recipients, I can set event 
to be inhibitAllNotifications for PutAllMessage to let it only apply 
distribution.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to