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

Jason Huynh updated GEODE-2870:
-------------------------------
    Description: 
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.


  was:
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.






> 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)

Reply via email to