-
Notifications
You must be signed in to change notification settings - Fork 4k
Description
I'm trying to implement Flight RPC on RPC framework with protobuf message support in distributed system.
However, the flight rpc is tied to grpc.
Classes from grpc used in flight server are:
grpc::ServerContextused in grpc generated code in parameter, and used to generateServerCallContext.grpc::Statusused in grpc generated code as return type.grpc::ServerReaderWriterandgrpc::ServerReaderused in massive wrapped MessageReader/Writer classes.
1 & 2 are not coupled much with flight, while the third part is the tough work.
Shall we introduce an interface class with same semantics to allow anyone implement the writing process to stream, such as arrow::flight::ServerReaderWriter and arrow::flight::ServerReader.
So that, making a shim layer between FlightServiceImpl and FlightServerBase is possible to decouple flight from grpc, meanwhile taking advantage of its zero-copy messages.
All message converting processes can be handled in the shim layer.
For example, the function definition of DoGet can be arrow::Status DoGet(ServerCallContext\* context, const pb::Ticket\* request, ServerWriter<pb::FlightData>\* writer), which converts pb messages to flight's and call functions from actual business logic implementation from FlightServerBase as Status DoGet(const ServerCallContext& context, const Ticket& request, std::unique_ptr<FlightDataStream>\* stream).
While, the client seems more complex, since the cookie stuff and others.
If the idea above is possible, I'll have a exploration on client in depth
Reporter: Wenbo Hu
Related issues:
- [C++][FlightRPC] Support non-grpc data planes (duplicates)
Note: This issue was originally created as ARROW-13889. Please see the migration documentation for further details.