Hi all,


We've been evaluating Flight for our use, and we're wondering if the protocol 
is still open to extensions, as having a few application-defined metadata 
fields would help our use cases a lot.



(Apologies if this is a repost - was having issue with the spam filter.)



Specifically, in DoGet, having a metadata binary blob in the server->client 
messages would help implement resumable requests, especially as we have 
non-monotonically-indexed data streams. This would also help us reuse 
server-side state if we do have to resume a stream.



In DoPut, we think making this call bidirectional would be useful to support 
application-level ACKs, again to implement resumable uploads. The server would 
thus have the option to send back an application-defined binary blob at any 
point during an upload. This is less important, as you could imagine starting a 
plain gRPC server-streaming call alongside the Flight DoPut call to do the 
same. But as you can't bind a gRPC and Flight service on the same port/channel, 
this is somewhat inconvenient.



That leads me to the API-level niggles we have; it would be nice to be able to 
bind gRPC services alongside a Flight service, and conversely be able to reuse 
a gRPC channel across gRPC and Flight clients, though breaking the hiding of 
gRPC isn't desirable.



Meanwhile, it would be nice to wrap the gRPC server 'awaitTermination' methods, 
so that we don't have to busy-wait ourselves (as in Java) or have the option to 
not busy-wait taken away from us (as in C++). In particular, when investigating 
Python bindings to C++ [0], the fact that FlightServerBase::Run also calls 
grpc::Server::Wait for you means that Ctrl-C no longer works in Python.



Does what we're trying to accomplish make sense? Are there better ways to 
achieve resumable uploads/downloads in the current protocol?



[0]: https://github.com/apache/arrow/pull/3566



Thanks,

David

Reply via email to