[ 
https://issues.apache.org/jira/browse/ARROW-9587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17170806#comment-17170806
 ] 

David Li commented on ARROW-9587:
---------------------------------

Another problem this causes is a spurious IllegalStateException from gRPC if a 
DoPut sends an error - that ends the gRPC call, but then when Flight closes the 
FlightStream, the FlightStream tries to cancel the call, resulting in a 
double-close of the gRPC call.

> [FlightRPC][Java] Clean up DoPut/FlightStream memory handling
> -------------------------------------------------------------
>
>                 Key: ARROW-9587
>                 URL: https://issues.apache.org/jira/browse/ARROW-9587
>             Project: Apache Arrow
>          Issue Type: Improvement
>          Components: FlightRPC, Java
>    Affects Versions: 1.0.0
>            Reporter: David Li
>            Assignee: David Li
>            Priority: Major
>
> We've been running into issues with DoPut in Java. In particular:
>  * Closing a FlightStream without draining it should not send a cancellation 
> to the other side. A server will have sent an explicit error message, or will 
> simply just not want to read the entire stream. A client should explicitly 
> cancel/gRPC will cancel for you anyways when  you end the call. Also, the 
> gRPC call may already have ended and cancelling the call may result in a 
> runtime exception.
>  * The server should close/clean up things properly in DoPut (it should act 
> like DoExchange and tie closing of the stream to the onCompleted/onError 
> callbacks). Otherwise trying to use it with ARROW-9586 becomes impossible 
> (you need to close the FlightStream before ending the call, or you'll close 
> the per-call allocator before you close the FlightStream)
> I think this also ties into flakiness in unit tests.



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

Reply via email to