[ https://issues.apache.org/jira/browse/ARROW-14014?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bryan Cutler reassigned ARROW-14014: ------------------------------------ Assignee: Bryan Cutler > 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 > Assignee: Bryan Cutler > Priority: Major > Labels: pull-request-available > Time Spent: 20m > Remaining Estimate: 0h > > When using FlightClient.startPut combined with an 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) }} > It seems also that same problem exsists with FlightClient.getStream() and > ClientResponseObserver.onError(Throwable t) -- This message was sent by Atlassian Jira (v8.3.4#803005)