manudebouc created ARROW-14014:
----------------------------------
Summary: FlightClient.ClientStreamListener not notified on error
when parsing invalid trailers
Key: ARROW-14014
URL: https://issues.apache.org/jira/browse/ARROW-14014
Project: Apache Arrow
Issue Type: Bug
Components: Java
Affects Versions: 5.0.0
Reporter: manudebouc
When using FlightClient.startPut combined with and AsyncPutListener, we are
sometimes blocked for ever on FlightClient.ClientStreamListener.getResult()
because we do not receive error notification.
Due to intermediate proxy we sometime receive 502 or 504 errors and invalid
{{':status'}} header in trailers that cannot be parsed by
{{StatusUtils.parseTrailers in SetStreamObserver.onError(Throwable t)
generating an}}{{ IllegalArgumentException}}{{ that prevent our listener
notification, blocking for ever.}}
{{SEVERE: Exception while executing runnable
io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed@de593f34
java.lang.IllegalArgumentException: Invalid character ':' in key name ':status'
at
com.google.common.base.Preconditions.checkArgument(Preconditions.java:275)
at io.grpc.Metadata$Key.validateName(Metadata.java:742)
at io.grpc.Metadata$Key.<init>(Metadata.java:750)
at io.grpc.Metadata$Key.<init>(Metadata.java:668)
at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:959)
at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:954)
at io.grpc.Metadata$Key.of(Metadata.java:705)
at io.grpc.Metadata$Key.of(Metadata.java:701)
at
org.apache.arrow.flight.grpc.StatusUtils.parseTrailers(StatusUtils.java:164)
at
org.apache.arrow.flight.grpc.StatusUtils.fromGrpcStatusAndTrailers(StatusUtils.java:128)
at
org.apache.arrow.flight.grpc.StatusUtils.fromGrpcRuntimeException(StatusUtils.java:152)
at
org.apache.arrow.flight.grpc.StatusUtils.fromThrowable(StatusUtils.java:176)
at
org.apache.arrow.flight.FlightClient$SetStreamObserver.onError(FlightClient.java:440)
at
io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:478)
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.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:553)
at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:68)
at
io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:739)
at
io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:718)
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:823) }}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)