You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Nabarun Nag (Jira)" <ji...@apache.org> on 2021/09/03 02:23:11 UTC

[jira] [Closed] (GEODE-8127) redis function+delta may not always execute function on primary

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

Nabarun Nag closed GEODE-8127.
------------------------------

> redis function+delta may not always execute function on primary
> ---------------------------------------------------------------
>
>                 Key: GEODE-8127
>                 URL: https://issues.apache.org/jira/browse/GEODE-8127
>             Project: Geode
>          Issue Type: Bug
>          Components: redis
>            Reporter: Darrel Schneider
>            Assignee: Jens Deppe
>            Priority: Major
>             Fix For: 1.14.0
>
>
> The redis use of regions depends on the code that will modify the region that is storing redis data, to always execute on the primary. It thought it was accomplishing this by marking the function as "optimizeForWrite=true" and by routing the function to the node with the bucket using "withFilter(key)". This works most of the time. But in some cases the function executes on a redundant copy. It looks like what is happening is that at the time the function is dispatched it has one idea of who the primary is and sends the function to that node. But before it executes the primary moves from this node to another that is doing redundancy recovery. Then when our function finally does a "put" on the localDataSet it ends up being a remote operation that is sent to the other node.
> If our redis function could get a lock that prevents the bucket primary status from changing (see BucketRegion doLockForPrimary) and then check to see if we are the primary (if not throw an exception that causes the function sender to retry  (see BucketMovedException) otherwise execute the function and at the end release the lock (see BucketRegion doUnlockForPrimary).
> We could enable this with a new method added to Function (much like the existing isHA and optimizeForWrite). This new method could be executeOnPrimary and default to false (adding a default method to the Function interface will not cause backwards compatibility issues unless a current class that implements Function already had added a method named "executeOnPrimary").



--
This message was sent by Atlassian Jira
(v8.3.4#803005)