Hi Norman,
It's quite likely this is related:
https://issues.apache.org/jira/browse/ARROW-15876
The symptoms sound quite similar. However I don't think anyone's been able to
investigate it.
-David
On Wed, Aug 3, 2022, at 17:09, Norman Jordan via user wrote:
> Hello,
>
> I have a system with:
> Flight Client <-> Proxy <-> Flight Server
>
> I am using BackPressure to prevent the Proxy from buffering the entire stream.
>
> For the Proxy, when *getStream()* is called, it will handle it in another
> thread. In the other thread, it will call *getStream()* on the Flight Server
> and then run through a loop like this:
>
> while (serverStream.next()) {
> // Prepare client stream
> while (true) {
> result = backPressure.waitForListener(timeout);
> if (result == READY) {
> // Copy to client stream
> } else if (result == TIMEOUT) {
> // cancel server stream
> // notify client of error
> return;
> }
> }
> }
>
> I have seen some issues when the stream is large. If the client is fast, then
> it is able to receive the complete stream. If the client is slower, then it
> will usually fail. One of the failures that I have looked into has the
> *backPressure.waitForListener(timeout)* call in the Flight Server timeout.
> The timeout was reasonably large. During this time the Flight Client was
> continuing to read batches. The Proxy was continuing to loop through the
> outer while loop, but the Flight Server never saw the Proxy as ready.
>
> Why wasn't the Flight Server able to see the Proxy as ready when the timeout
> happened?