[ 
https://issues.apache.org/jira/browse/ARROW-13889?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Li updated ARROW-13889:
-----------------------------
    Summary: [C++][FlightRPC] Decouple Arrow Flight RPC from GRPC  (was: 
Decouple Arrow Flight RPC from GRPC)

> [C++][FlightRPC] Decouple Arrow Flight RPC from GRPC
> ----------------------------------------------------
>
>                 Key: ARROW-13889
>                 URL: https://issues.apache.org/jira/browse/ARROW-13889
>             Project: Apache Arrow
>          Issue Type: New Feature
>          Components: C++, FlightRPC
>    Affects Versions: 5.0.0
>            Reporter: Wenbo Hu
>            Priority: Major
>              Labels: features
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> 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:
> 1. `grpc::ServerContext` used in grpc generated code in parameter, and used 
> to generate `ServerCallContext`.
> 2. `grpc::Status` used in grpc generated code as return type.
> 3. `grpc::ServerReaderWriter` and `grpc::ServerReader` used 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



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to