Arrow Flight RPC — Apache Arrow v20.0.0 (original) (raw)
Arrow Flight is an RPC framework for efficient transfer of Flight data over the network.
Writing a Flight Service#
Servers are subclasses of FlightServerBase. To implement individual RPCs, override the RPC methods on this class.
import pyarrow.flight as flight
class MyFlightServer(flight.FlightServerBase): def list_flights(self, context, criteria): info = flight.FlightInfo(...) yield info
Each RPC method always takes a ServerCallContext for common parameters. To indicate failure, raise an exception; Flight-specific errors can be indicated by raising one of the subclasses ofFlightError.
To start a server, create a Location to specify where to listen, and create an instance of the server. (A string will be converted into a location.) This will start the server, but won’t block the rest of the program. Call FlightServerBase.serve() to block until the server stops.
Listen to all interfaces on a free port
server = MyFlightServer("grpc://0.0.0.0:0")
print("Server listening on port", server.port) server.serve()
Using the Flight Client#
To connect to a Flight service, call pyarrow.flight.connect()with a location.
Cancellation and Timeouts#
When making a call, clients can optionally provideFlightCallOptions. This allows clients to set a timeout on calls or provide custom HTTP headers, among other features. Also, some objects returned by client RPC calls expose a cancel
method which allows terminating a call early.
On the server side, timeouts are transparent. For cancellation, the server needs to manually poll ServerCallContext.is_cancelled()to check if the client has cancelled the call, and if so, break out of any processing the server is currently doing.
Enabling TLS#
TLS can be enabled when setting up a server by providing a certificate and key pair to FlightServerBase.
On the client side, use Location.for_grpc_tls() to construct theLocation to listen on.
Enabling Authentication#
Warning
Authentication is insecure without enabling TLS.
Handshake-based authentication can be enabled by implementingServerAuthHandler. Authentication consists of two parts: on initial client connection, the server and client authentication implementations can perform any negotiation needed; then, on each RPC thereafter, the client provides a token. The server authentication handler validates the token and provides the identity of the client. This identity can be obtained from theServerCallContext.
Custom Middleware#
Servers and clients support custom middleware (or interceptors) that are called on every request and can modify the request in a limited fashion. These can be implemented by subclassingServerMiddleware and ClientMiddleware, then providing them when creating the client or server.
Middleware are fairly limited, but they can add headers to a request/response. On the server, they can inspect incoming headers and fail the request; hence, they can be used to implement custom authentication methods.