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

Wes McKinney resolved ARROW-8101.
---------------------------------
    Fix Version/s: 0.17.0
       Resolution: Fixed

Issue resolved by pull request 6602
[https://github.com/apache/arrow/pull/6602]

> [FlightRPC][Java] Can't read/write only an empty null array
> -----------------------------------------------------------
>
>                 Key: ARROW-8101
>                 URL: https://issues.apache.org/jira/browse/ARROW-8101
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: FlightRPC, Java
>    Affects Versions: 0.16.0
>            Reporter: David Li
>            Assignee: David Li
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 0.17.0
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> This is rather an edge case, but Java/Flight fails with a table consisting of 
> only an empty null array, since it has no buffers, and Java assumes this can 
> never happen.
> {noformat}
> Exception in thread "main" org.apache.arrow.flight.FlightRuntimeException: 
> CallStatus{code=CANCELLED, cause=java.lang.RuntimeException: Unexpected IO 
> Exception, description='Failed to stream message'}
>       at 
> org.apache.arrow.flight.CallStatus.toRuntimeException(CallStatus.java:113)
>       at 
> org.apache.arrow.flight.grpc.StatusUtils.fromGrpcRuntimeException(StatusUtils.java:134)
>       at 
> org.apache.arrow.flight.grpc.StatusUtils.fromThrowable(StatusUtils.java:142)
>       at 
> org.apache.arrow.flight.FlightClient$SetStreamObserver.onError(FlightClient.java:315)
>       at 
> io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:442)
>       at 
> io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
>       at 
> io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
>       at 
> io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
>       at 
> org.apache.arrow.flight.grpc.ClientInterceptorAdapter$FlightClientCallListener.onClose(ClientInterceptorAdapter.java:117)
>       at 
> io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
>       at 
> io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
>       at 
> io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
>       at 
> io.grpc.internal.CensusStatsModule$StatsClientInterceptor$1$1.onClose(CensusStatsModule.java:700)
>       at 
> io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
>       at 
> io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
>       at 
> io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
>       at 
> io.grpc.internal.CensusTracingModule$TracingClientInterceptor$1$1.onClose(CensusTracingModule.java:399)
>       at 
> io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:510)
>       at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:66)
>       at 
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:630)
>       at 
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$700(ClientCallImpl.java:518)
>       at 
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:692)
>       at 
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:681)
>       at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
>       at 
> io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.RuntimeException: Unexpected IO Exception
>       at 
> org.apache.arrow.flight.ArrowMessage.asInputStream(ArrowMessage.java:334)
>       at org.apache.arrow.flight.ArrowMessage.access$000(ArrowMessage.java:64)
>       at 
> org.apache.arrow.flight.ArrowMessage$ArrowMessageHolderMarshaller.stream(ArrowMessage.java:382)
>       at 
> org.apache.arrow.flight.ArrowMessage$ArrowMessageHolderMarshaller.stream(ArrowMessage.java:372)
>       at io.grpc.MethodDescriptor.streamRequest(MethodDescriptor.java:290)
>       at 
> io.grpc.internal.ClientCallImpl.sendMessageInternal(ClientCallImpl.java:473)
>       at io.grpc.internal.ClientCallImpl.sendMessage(ClientCallImpl.java:457)
>       at 
> io.grpc.ForwardingClientCall.sendMessage(ForwardingClientCall.java:37)
>       at 
> io.grpc.ForwardingClientCall.sendMessage(ForwardingClientCall.java:37)
>       at 
> io.grpc.ForwardingClientCall.sendMessage(ForwardingClientCall.java:37)
>       at 
> io.grpc.stub.ClientCalls$CallToStreamObserverAdapter.onNext(ClientCalls.java:341)
>       at 
> org.apache.arrow.flight.FlightClient$PutObserver.putNext(FlightClient.java:354)
>       at 
> org.apache.arrow.flight.example.integration.IntegrationTestClient.testStream(IntegrationTestClient.java:132)
>       at 
> org.apache.arrow.flight.example.integration.IntegrationTestClient.run(IntegrationTestClient.java:96)
>       at 
> org.apache.arrow.flight.example.integration.IntegrationTestClient.main(IntegrationTestClient.java:69)
> Caused by: java.lang.IllegalArgumentException
>       at 
> org.apache.arrow.util.Preconditions.checkArgument(Preconditions.java:122)
>       at 
> org.apache.arrow.flight.ArrowMessage.asInputStream(ArrowMessage.java:294)
>       ... 14 more
> {noformat}



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

Reply via email to