You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "manudebouc (Jira)" <ji...@apache.org> on 2021/09/16 10:05:00 UTC

[jira] [Created] (ARROW-14014) FlightClient.ClientStreamListener not notified on error when parsing invalid trailers

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)