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

Tzu-Li (Gordon) Tai closed FLINK-19515.
---------------------------------------
    Fix Version/s: statefun-2.3.0
                   statefun-2.2.1
         Assignee: Frans King
       Resolution: Fixed

2.2.1: e10cdd3218b56f75a40ae107994ca7463c55b5a9
2.3.0: b3a88dab20c56bc7cb1c1e2e2fe3237eda46144a

> Async RequestReply handler concurrency bug
> ------------------------------------------
>
>                 Key: FLINK-19515
>                 URL: https://issues.apache.org/jira/browse/FLINK-19515
>             Project: Flink
>          Issue Type: Bug
>    Affects Versions: statefun-2.2.0
>            Reporter: Frans King
>            Assignee: Frans King
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: statefun-2.2.1, statefun-2.3.0
>
>
> Async RequestReply handler implemented in 
> https://issues.apache.org/jira/browse/FLINK-18518 has a concurrency problem.
>  
> Lines 151 to 152 of 
> [https://github.com/apache/flink-statefun/blob/master/statefun-python-sdk/statefun/request_reply.py]
> The coro is awaiting and may yield.  Another coro may continue that was 
> yielding and call ic.complete() which sets the ic.context to None
>  
> In short:
>  
> {code:java}
> ic.setup(request_bytes)        
> await self.handle_invocation(ic)        
> return ic.complete()
>  
> {code}
> Needs to happen atomically.
>  
> I worked around this by creating an AsyncRequestReplyHandler for each request.
>  
> It should be possible to re-produce this by putting an await asyncio.sleep(5) 
> in the greeter example and then run in gunicorn with a single asyncio 
> thread/event loop (-w 1).  
>  
>  
>  
> {code:java}
>     response_data = await handler(request_data)
>   File 
> "/home/pi/.local/lib/python3.7/site-packages/statefun/request_reply.py", line 
> 152, in __call__
>     return ic.complete()
>   File 
> "/home/pi/.local/lib/python3.7/site-packages/statefun/request_reply.py", line 
> 57, in complete
>     self.add_mutations(context, invocation_result)
>   File 
> "/home/pi/.local/lib/python3.7/site-packages/statefun/request_reply.py", line 
> 82, in add_mutations
>     for name, handle in context.states.items():
> AttributeError: 'NoneType' object has no attribute 'states'
> {code}
>  



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

Reply via email to