[ https://issues.apache.org/jira/browse/GEODE-2714?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15941201#comment-15941201 ]
Jacob S. Barrett commented on GEODE-2714: ----------------------------------------- How about an annotation rather than an interface change? {noformat} @AquirePrimaryBucketReadLock class MyFunction .... { } {noformat} Whatever the name is, be explicit about what it does in the name. Other options are more generic annotation {{@AquirePrimaryBucketLock(Read|Write))}}. > Proposal for new api on Function interface > ------------------------------------------ > > Key: GEODE-2714 > URL: https://issues.apache.org/jira/browse/GEODE-2714 > Project: Geode > Issue Type: Bug > Components: functions > Reporter: Hitesh Khamesra > > Function execution is the most useful feature of Geode. It allows you to > execute a user-defined function on the node which holds the primary bucket of > the partition region. In many cases application has colocated partition > regions and using function application can operate on all the colocated > primary buckets. > In that function, the application makes sure that no other thread is > operating on same colocated keys. But during bucket rebalance there is a > possibility that two thread might be executing a function on the same set of > keys on different nodes. > It can happen as we don't take the lock(read-lock) on a primary bucket while > executing the function. That allows Geode to move bucket for rebalancing. > Proposal: Introduce the following api on Function interface to indicate the > need to primariness. > boolean needPrimaryLock(); // name suggestion? > The application would return true if they need a lock on the primary bucket. > Default would be false. > Geode would call the interface and try to take readLock before executing the > function on that node. Otherwise, it will throw the exception and let app > re-execute that function. -- This message was sent by Atlassian JIRA (v6.3.15#6346)