[ https://issues.apache.org/jira/browse/GEODE-2870?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15995694#comment-15995694 ]
ASF GitHub Bot commented on GEODE-2870: --------------------------------------- GitHub user jhuynh1 opened a pull request: https://github.com/apache/geode/pull/491 GEODE-2870: Local node function execution failure correctly returns e… …xception * Race condition and escaping synchronized block led to function possibly missing results * It was possible a remote node would enter the synchronized block after local node threw exception * Certain side effects would allow processing of remote node results to be considered last result * Local processing thread would be paused/non active and miss opportunity to write exception * This would manifest as incomplete results instead of a retry Reviewers: @upthewaterspout @nabarunnag @gesterzhou @boglesby @ladyVader You can merge this pull request into a Git repository by running: $ git pull https://github.com/apache/geode feature/GEODE-2870 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/geode/pull/491.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #491 ---- commit d7671df8788fa926967ef35a71b95b21ffd41726 Author: Jason Huynh <huyn...@gmail.com> Date: 2017-05-02T23:30:46Z GEODE-2870: Local node function execution failure correctly returns exception * Race condition and escaping synchronized block led to function possibly missing results * It was possible a remote node would enter the synchronized block after local node threw exception * Certain side effects would allow processing of remote node results to be considered last result * Local processing thread would be paused/non active and miss opportunity to write exception * This would manifest as incomplete results instead of a retry ---- > BucketMovedException during function execution may lead to client missing > results > --------------------------------------------------------------------------------- > > Key: GEODE-2870 > URL: https://issues.apache.org/jira/browse/GEODE-2870 > Project: Geode > Issue Type: Bug > Components: functions > Affects Versions: 1.1.0 > Reporter: Jason Huynh > Assignee: Jason Huynh > > If a function isHA and hasResult, if checkForBucketMovement() throws the > BucketMovedException, this escapes the synchronized lastResult() method. > Propogating this to through the user function. > Hopefully the user function does something appropriate or allows it to > propagate to AbstractExecution.executeFunctionLocally(), which hands it to > handleException. Here is where the exception is written back to the client. > However, because we have now escaped the synchronized method, the thread can > be paused. > A remote execution returns with results and now enters the synchronized > lastResult() method. The state flags have been set and now this result is > considered the last result and lastResult is now sent. We end up not > retrying even though the local node had failed. It just hadn't had the > opportunity to send the exception back. > This issue has probably been in the product for a long time. -- This message was sent by Atlassian JIRA (v6.3.15#6346)