Arrow Flight RPC#
注意
Flight 目前尚不稳定。API 可能会有变动,尽管我们预计不会发生剧烈变更。
常见类型#
-
struct Action : public arrow::flight::internal::BaseType<Action>#
使用 DoAction RPC 执行的操作。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
-
arrow::Status SerializeToString(std::string *out) const#
-
struct ActionType : public arrow::flight::internal::BaseType<ActionType>#
可以使用 DoAction RPC 执行的操作类型。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
公共静态函数
-
static arrow::Status Deserialize(std::string_view serialized, ActionType *out)#
从其在线传输格式表示中反序列化此消息。
如果您需要返回 Result 的版本,请使用
Deserialize(serialized)。
-
arrow::Status SerializeToString(std::string *out) const#
-
class AddCallHeaders#
针对 RPC 调用头部的只写包装器。
公共函数
-
virtual void AddHeader(const std::string &key, const std::string &value) = 0#
添加要发送给客户端的头部。
- 参数:
key – [in] 头部名称。必须是小写 ASCII 字符;某些传输协议可能会拒绝无效的头部名称。
value – [in] 头部值。某些传输协议可能仅在头部名称以“-bin”结尾时接受二进制头部值。
-
virtual void AddHeader(const std::string &key, const std::string &value) = 0#
-
struct CallInfo#
关于 Flight RPC 实例的信息。
公共成员
-
FlightMethod method#
此调用的 RPC 方法。
-
FlightMethod method#
-
struct Criteria : public arrow::flight::internal::BaseType<Criteria>#
用于 ListFlights RPC 的不透明选择标准。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
公共成员
-
std::string expression#
不透明的标准表达式,取决于服务器实现。
-
arrow::Status SerializeToString(std::string *out) const#
-
struct FlightDescriptor : public arrow::flight::internal::BaseType<FlightDescriptor>#
用于检索或生成数据集的请求。
公共函数
-
std::string ToString() const#
获取此描述符的人类可读形式。
-
arrow::Status SerializeToString(std::string *out) const#
获取此类型的在线传输格式表示。
在与可能需要返回 Flight 类型的非 Flight 系统(例如 REST 服务)互操作时很有用。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
公共成员
-
DescriptorType type = UNKNOWN#
描述符类型。
-
std::string cmd#
用于表示命令的不透明值。
仅当类型为 CMD 时才应定义。
-
std::vector<std::string> path#
标识特定数据集的字符串列表。
仅当类型为 PATH 时才应定义。
公共静态函数
-
static arrow::Status Deserialize(std::string_view serialized, FlightDescriptor *out)#
解析此类型的在线传输格式表示。
在与可能需要返回 Flight 类型的非 Flight 系统(例如 REST 服务)互操作时很有用。
如果您需要返回 Result 的版本,请使用
Deserialize(serialized)。
-
std::string ToString() const#
-
struct FlightEndpoint : public arrow::flight::internal::BaseType<FlightEndpoint>#
Flight 票据以及可以兑换该票据的位置列表。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
公共成员
-
std::optional<Timestamp> expiration_time#
此数据流的过期时间。
如果存在,客户端可以假设它们可以重试 DoGet 请求。否则,客户端应避免重试 DoGet 请求。
-
std::string app_metadata#
应用程序定义的不透明元数据。
公共静态函数
-
static arrow::Status Deserialize(std::string_view serialized, FlightEndpoint *out)#
从其在线传输格式表示中反序列化此消息。
如果您需要返回 Result 的版本,请使用
Deserialize(serialized)。
-
arrow::Status SerializeToString(std::string *out) const#
-
class FlightInfo : public arrow::flight::internal::BaseType<std::unique_ptr<FlightInfo>>#
由 GetFlightInfo 返回的用于检索数据集的访问坐标。
公共函数
-
arrow::Result<std::shared_ptr<Schema>> GetSchema(ipc::DictionaryMemo *dictionary_memo) const#
反序列化数据集的 Arrow Schema。
将任何字典编码字段填充到 DictionaryMemo 中以进行记账。
- 参数:
dictionary_memo – [inout] 用于字典记账,将被修改。
- 返回:
包含重构后的 Schema 的 Arrow 结果。请注意,Schema 可能为 nullptr,因为它是可选的。
-
inline const FlightDescriptor &descriptor() const#
与此 flight 关联的描述符,可能未设置。
-
inline const std::vector<FlightEndpoint> &endpoints() const#
与此 flight(数据集)关联的端点列表。
要使用整个 flight,必须使用所有端点。
-
inline int64_t total_records() const#
数据集中的总记录数(行数)。如果未知,请设为 -1。
-
inline int64_t total_bytes() const#
数据集中的总字节数。如果未知,请设为 -1。
-
inline bool ordered() const#
端点是否与数据顺序一致。
-
inline const std::string &app_metadata() const#
应用程序定义的不透明元数据。
-
arrow::Status SerializeToString(std::string *out) const#
获取此类型的在线传输格式表示。
在与可能需要返回 Flight 类型的非 Flight 系统(例如 REST 服务)互操作时很有用。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
-
bool Equals(const FlightInfo &other) const#
比较两个 FlightInfo 是否相等。
这将比较序列化的 Schema 表示,而不是 Schema 的逻辑相等性。
公共静态函数
-
static arrow::Result<FlightInfo> Make(const Schema &schema, const FlightDescriptor &descriptor, const std::vector<FlightEndpoint> &endpoints, int64_t total_records, int64_t total_bytes, bool ordered = false, std::string app_metadata = "")#
用于构建 FlightInfo 的工厂方法。
用于构建 FlightInfo 的工厂方法。
-
static arrow::Status Deserialize(std::string_view serialized, std::unique_ptr<FlightInfo> *out)#
解析此类型的在线传输格式表示。
在与可能需要返回 Flight 类型的非 Flight 系统(例如 REST 服务)互操作时很有用。
如果您需要返回 Result 的版本,请使用
Deserialize(serialized)。
-
struct Data#
-
arrow::Result<std::shared_ptr<Schema>> GetSchema(ipc::DictionaryMemo *dictionary_memo) const#
-
struct FlightPayload#
用于即将放入线路的消息的暂存数据结构。
此结构对应于协议中的 FlightData。
-
class FlightListing#
ListFlights 返回的 FlightInfo 实例的迭代器。
子类:arrow::flight::SimpleFlightListing
公共函数
-
virtual arrow::Result<std::unique_ptr<FlightInfo>> Next() = 0#
从迭代器中检索下一个 FlightInfo。
- 返回:
包含单个 FlightInfo 的 Arrow 结果。如果没有剩余项,则设为 nullptr。
-
virtual arrow::Result<std::unique_ptr<FlightInfo>> Next() = 0#
-
enum class arrow::flight::FlightMethod : char#
Flight 实现的 RPC 方法枚举。
值
-
enumerator Invalid#
-
enumerator Handshake#
-
enumerator ListFlights#
-
enumerator GetFlightInfo#
-
enumerator GetSchema#
-
enumerator DoGet#
-
enumerator DoPut#
-
enumerator DoAction#
-
enumerator ListActions#
-
enumerator DoExchange#
-
enumerator PollFlightInfo#
-
enumerator Invalid#
-
struct Location : public arrow::flight::internal::BaseType<Location>#
主机位置(URI)。
公共函数
-
Location()#
初始化一个空白位置。
-
std::string scheme() const#
获取此 URI 的方案(scheme)。
-
std::string ToString() const#
将此 URI 表示为字符串。
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
公共静态函数
-
static const Location &ReuseConnection()#
获取回退 URI。
arrow-flight-reuse-connection://? 表示客户端可以尝试重用现有的 Flight 服务连接来获取数据,而不是为 FlightEndpoint 响应中列出的其他位置之一创建新连接。
-
static arrow::Result<Location> ForGrpcTcp(const std::string &host, const int port)#
从主机名和端口初始化非 TLS、基于 gRPC 的 Flight 服务的位置。
- 参数:
host – [in] 要连接的主机名。
port – [in] 端口。
- 返回:
包含结果位置的 Arrow 结果。
-
static arrow::Result<Location> ForGrpcTls(const std::string &host, const int port)#
从主机名和端口初始化支持 TLS 的、基于 gRPC 的 Flight 服务的位置。
- 参数:
host – [in] 要连接的主机名。
port – [in] 端口。
- 返回:
包含结果位置的 Arrow 结果。
-
static arrow::Result<Location> ForGrpcUnix(const std::string &path)#
初始化基于域套接字(domain socket)的 Flight 服务的位置。
- 参数:
path – [in] 域套接字的路径。
- 返回:
包含结果位置的 Arrow 结果。
-
Location()#
-
class MetadataRecordBatchReader#
用于读取带有元数据的 Flight 数据的接口。
子类包括 arrow::flight::FlightMessageReader, arrow::flight::FlightStreamReader
公共函数
-
virtual arrow::Result<FlightStreamChunk> Next() = 0#
从 Flight 获取下一条消息。
如果流已结束,则 FlightStreamChunk 的成员将为 nullptr。
-
virtual arrow::Result<std::vector<std::shared_ptr<RecordBatch>>> ToRecordBatches()#
将整个流作为记录批次向量消耗。
-
virtual arrow::Result<FlightStreamChunk> Next() = 0#
-
struct Result : public arrow::flight::internal::BaseType<Result>#
执行操作后返回的不透明结果。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
将此消息序列化为其在线传输格式的表示形式。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
-
arrow::Status SerializeToString(std::string *out) const#
-
struct Ticket : public arrow::flight::internal::BaseType<Ticket>#
提供在通过 DoGet RPC 请求数据流时使用的不透明标识符或凭据的数据结构。
公共函数
-
arrow::Status SerializeToString(std::string *out) const#
获取此类型的在线传输格式表示。
在与可能需要返回 Flight 类型的非 Flight 系统(例如 REST 服务)互操作时很有用。
如果您需要返回 Result 的版本,请使用
SerializeToString()。
-
arrow::Status SerializeToString(std::string *out) const#
客户端#
-
class FlightClient#
用于 Arrow Flight RPC 服务的客户端类。
公共函数
-
Status Authenticate(const FlightCallOptions &options, std::unique_ptr<ClientAuthHandler> auth_handler)#
使用给定的处理程序向服务器进行身份验证。
- 参数:
options – [in] 每个 RPC 的选项
auth_handler – [in] 要使用的身份验证机制
- 返回:
如果客户端身份验证成功,则返回 Status OK
-
arrow::Result<std::pair<std::string, std::string>> AuthenticateBasicToken(const FlightCallOptions &options, const std::string &username, const std::string &password)#
使用基本 HTTP 样式身份验证向服务器进行身份验证。
- 参数:
options – [in] 每个 RPC 的选项
username – [in] 要使用的用户名
password – [in] 要使用的密码
- 返回:
如果客户端身份验证成功,则返回带有 Bearer 令牌和状态 OK 的 Arrow 结果
-
arrow::Result<std::unique_ptr<ResultStream>> DoAction(const FlightCallOptions &options, const Action &action)#
执行指定的操作,并返回结果流的迭代器(如有)。
- 参数:
options – [in] 每个 RPC 的选项
action – [in] 要执行的操作
- 返回:
返回带有用于读取结果的迭代器对象的 Arrow 结果
-
arrow::Result<CancelFlightInfoResult> CancelFlightInfo(const FlightCallOptions &options, const CancelFlightInfoRequest &request)#
执行 CancelFlightInfo 操作,并返回 CancelFlightInfoResult。
- 参数:
options – [in] 每个 RPC 的选项
request – [in] CancelFlightInfoRequest
- 返回:
返回带有 CancelFlightInfoResult 的 Arrow 结果
-
arrow::Result<FlightEndpoint> RenewFlightEndpoint(const FlightCallOptions &options, const RenewFlightEndpointRequest &request)#
执行 RenewFlightEndpoint 操作,并返回更新后的 FlightEndpoint。
- 参数:
options – [in] 每个 RPC 的选项
request – [in] RenewFlightEndpointRequest
- 返回:
返回带有更新后的 FlightEndpoint 的 Arrow 结果
-
arrow::Result<std::vector<ActionType>> ListActions(const FlightCallOptions &options)#
检索可用 Action 类型的列表。
- 参数:
options – [in] 每个 RPC 的选项
- 返回:
返回包含可用操作的 Arrow 结果
-
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfo(const FlightCallOptions &options, const FlightDescriptor &descriptor)#
请求单个 Flight 的访问计划,这可以是一个现有的数据集或要执行的命令。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 数据集请求,无论是命名数据集还是命令
- 返回:
返回带有 FlightInfo 的 Arrow 结果,该信息描述了如何访问数据集
异步 GetFlightInfo。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 数据集请求
listener – [in] 响应和 RPC 完成的回调
-
arrow::Future<FlightInfo> GetFlightInfoAsync(const FlightCallOptions &options, const FlightDescriptor &descriptor)#
返回 Future 的异步 GetFlightInfo。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 数据集请求
-
arrow::Result<std::unique_ptr<PollInfo>> PollFlightInfo(const FlightCallOptions &options, const FlightDescriptor &descriptor)#
请求并轮询长时间运行的查询。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 数据集请求或由之前的 PollFlightInfo 调用返回的描述符
- 返回:
返回带有描述请求查询状态的 PollInfo 的 Arrow 结果
-
arrow::Result<std::unique_ptr<SchemaResult>> GetSchema(const FlightCallOptions &options, const FlightDescriptor &descriptor)#
请求单个 Flight 的 schema,这可以是一个现有的数据集或要执行的命令。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 数据集请求,无论是命名数据集还是命令
- 返回:
返回带有描述数据集 schema 的 SchemaResult 的 Arrow 结果
-
arrow::Result<std::unique_ptr<FlightListing>> ListFlights()#
列出服务器已知的所有可用 Flight。
- 返回:
返回带有迭代器的 Arrow 结果,该迭代器为每个 Flight 返回一个 FlightInfo
-
arrow::Result<std::unique_ptr<FlightListing>> ListFlights(const FlightCallOptions &options, const Criteria &criteria)#
根据指定的过滤条件列出可用的 Flight。
- 参数:
options – [in] 每个 RPC 的选项
criteria – [in] 过滤条件(不透明)
- 返回:
返回带有迭代器的 Arrow 结果,该迭代器为每个 Flight 返回一个 FlightInfo
-
arrow::Result<std::unique_ptr<FlightStreamReader>> DoGet(const FlightCallOptions &options, const Ticket &ticket)#
给定一个 Flight 票据和 schema,请求被发送流。
返回记录批次流读取器
- 参数:
options – [in] 每个 RPC 的选项
ticket – [in] 要使用的 Flight 票据
- 返回:
返回带有 RecordBatchReader 的 Arrow 结果
将数据上传到由给定描述符描述的 Flight。
调用者在完成写入后,必须对返回的流调用 Close()。
读取器和写入器是链接在一起的;关闭写入器也会关闭读取器。使用 DoneWriting 仅关闭通道的写入侧。
- 参数:
options – [in] 每个 RPC 的选项
descriptor – [in] 流的描述符
schema – [in] 要上传数据的 schema
- 返回:
返回带有包含读取器和写入器的 DoPutResult 结构体的 Arrow 结果
-
::arrow::Result<SetSessionOptionsResult> SetSessionOptions(const FlightCallOptions &options, const SetSessionOptionsRequest &request)#
按名称/值设置服务器会话选项。
会话通常通过 HTTP Cookie 持久化。
- 参数:
options – [in] 每个 RPC 的选项
request – [in] 要设置的服务器会话选项
-
::arrow::Result<GetSessionOptionsResult> GetSessionOptions(const FlightCallOptions &options, const GetSessionOptionsRequest &request)#
获取当前的服务器会话选项。
会话通常通过 HTTP Cookie 访问。
- 参数:
options – [in] 每个 RPC 的选项
request – [in] (空) GetSessionOptions 请求对象。
-
::arrow::Result<CloseSessionResult> CloseSession(const FlightCallOptions &options, const CloseSessionRequest &request)#
关闭/使当前的服务器会话失效。
会话通常通过 HTTP Cookie 访问。
- 参数:
options – [in] 每个 RPC 的选项
request – [in] (空) CloseSession 请求对象。
-
bool supports_async() const# 此客户端是否支持异步方法。
-
Status CheckAsyncSupport() const#
检查此客户端是否支持异步方法。
这类似于 supports_async(),不同之处在于,如果不支持异步,则会返回详细的错误消息。如果支持异步,此函数将成功返回。
公共静态函数
-
static arrow::Result<std::unique_ptr<FlightClient>> Connect(const Location &location)#
连接到未经身份验证的 Flight 服务。
- 参数:
location – [in] URI
- 返回:
返回带有创建的 FlightClient 的 Arrow 结果,状态 OK 可能并不表示连接已成功
-
static arrow::Result<std::unique_ptr<FlightClient>> Connect(const Location &location, const FlightClientOptions &options)#
连接到未经身份验证的 Flight 服务。
- 参数:
location – [in] URI
options – [in] 设置客户端的其他选项
- 返回:
返回带有创建的 FlightClient 的 Arrow 结果,状态 OK 可能并不表示连接已成功
-
struct DoExchangeResult#
-
struct DoPutResult#
DoPut 返回值。
公共成员
-
std::unique_ptr<FlightStreamWriter> writer#
用于写入记录批次的写入器
-
std::unique_ptr<FlightMetadataReader> reader#
用于从服务器读取应用程序元数据的读取器
-
std::unique_ptr<FlightStreamWriter> writer#
-
Status Authenticate(const FlightCallOptions &options, std::unique_ptr<ClientAuthHandler> auth_handler)#
-
struct FlightClientOptions#
公共成员
-
std::string tls_root_certs#
用于验证服务器证书的根证书。
-
std::string override_hostname#
覆盖 TLS 检查的主机名。请谨慎使用。
-
std::string cert_chain#
如果使用双向 TLS,则使用的客户端证书。
-
std::string private_key#
用于双向 TLS 的客户端证书关联的私钥。
-
std::vector<std::shared_ptr<ClientMiddlewareFactory>> middleware#
要应用的客户端中间件列表。
-
int64_t write_size_limit_bytes = 0#
向服务器发送 Arrow 数据时,单批次写入字节数的软限制。
用于帮助限制服务器内存消耗。仅在正数时启用。启用后,FlightStreamWriter.Write* 可能会抛出带有 FlightWriteSizeStatusDetail 错误详情的 IOError。
-
std::vector<std::pair<std::string, std::variant<int, std::string>>> generic_options#
通用连接选项,传递给底层传输层;其解释取决于具体实现。
-
bool disable_server_verification = false#
使用 TLS 但不验证服务器证书。请谨慎使用。
公共静态函数
-
static FlightClientOptions Defaults()#
获取默认选项。
-
std::string tls_root_certs#
-
class FlightCallOptions#
为 Arrow Flight 调用提供给底层 RPC 层的提示。
公共函数
-
FlightCallOptions()#
创建一组默认的调用选项。
公共成员
-
TimeoutDuration timeout#
本次调用的可选超时时间。
负数持续时间表示将改用实现定义的默认行为。这是默认值。
-
ipc::IpcReadOptions read_options#
IPC 读取选项(如果适用于该调用)。
-
ipc::IpcWriteOptions write_options#
IPC 写入选项(如果适用于该调用)。
-
std::vector<std::pair<std::string, std::string>> headers#
客户端添加到上下文的头部信息。
-
StopToken stop_token#
用于实现长运行请求的交互式用户取消的令牌。
-
std::shared_ptr<MemoryManager> memory_manager#
用于控制传入数据分配位置的可选内存管理器。
-
FlightCallOptions()#
-
class ClientAuthHandler#
Flight 服务的身份验证实现。
身份验证包括初始协商和针对每个调用的令牌验证。实现可以选择使用其中一种或两种机制。
-
class ClientMiddleware#
用于调用的客户端中间件,每个 RPC 实例化一次。
中间件必须运行迅速且绝对可靠:中间件实例没有办法拒绝调用或报告错误。
公共函数
-
virtual void SendingHeaders(AddCallHeaders *outgoing_headers) = 0#
发送头部信息之前的回调。
可以添加额外的头部信息,但无法读取已存在的头部信息。
-
virtual void ReceivedHeaders(const CallHeaders &incoming_headers) = 0#
从服务器接收到头部信息时的回调。
该方法可能会被多次调用,因为服务器会发送头部信息和尾部信息。某些实现(例如 gRPC-Java,因此 Java 版 Arrow Flight)在 RPC 出错时可能会将头部信息合并到尾部信息中。
-
virtual void SendingHeaders(AddCallHeaders *outgoing_headers) = 0#
-
class ClientMiddlewareFactory#
新中间件实例的工厂。
如果添加到客户端,该工厂将被用于每个 RPC(包括握手),以提供拦截调用的机会。
保证所有客户端中间件方法都从调用 RPC 方法实现的同一线程调用。
公共函数
-
virtual void StartCall(const CallInfo &info, std::unique_ptr<ClientMiddleware> *middleware) = 0#
新调用开始时的回调。
- 参数:
info – 关于该调用的信息。
middleware – [out] 此调用的中间件实例。如果未设置,将不会从此工厂向此调用实例添加中间件。
-
virtual void StartCall(const CallInfo &info, std::unique_ptr<ClientMiddleware> *middleware) = 0#
-
typedef std::chrono::duration<double, std::chrono::seconds::period> arrow::flight::TimeoutDuration#
Flight 调用超时的持续时间类型。
-
class FlightStreamReader : public arrow::flight::MetadataRecordBatchReader#
暴露 Flight 元数据和取消操作的 RecordBatchReader。
公共函数
-
virtual void Cancel() = 0#
尝试取消调用。
-
virtual arrow::Result<std::vector<std::shared_ptr<RecordBatch>>> ToRecordBatches(const StopToken &stop_token) = 0#
将整个流作为记录批次向量消耗。
-
virtual arrow::Result<std::vector<std::shared_ptr<RecordBatch>>> ToRecordBatches()#
将整个流作为记录批次向量消耗。
-
virtual arrow::ipc::ReadStats stats() const = 0
返回当前的读取统计信息。
-
virtual void Cancel() = 0#
-
class FlightStreamWriter : public arrow::flight::MetadataRecordBatchWriter#
一个 RecordBatchWriter,还允许通过 Flight 协议发送应用程序定义的元数据。
服务器#
-
class FlightServerBase#
RPC 服务器骨架实现,可通过实现其抽象方法来创建自定义服务器。
子类:arrow::flight::sql::FlightSqlServerBase
公共函数
-
Status Init(const FlightServerOptions &options)#
初始化一个监听于给定位置的 Flight 服务器。
必须在调用任何其他方法之前调用此方法。
- 参数:
options – [in] 此服务器的配置。
-
Status SetShutdownOnSignals(const std::vector<int> sigs)#
设置服务器在接收到任何给定信号编号时停止。
此方法必须在 Serve() 之前调用。
-
Status Serve()#
开始提供服务。
此方法会阻塞,直到服务器关闭。
服务器将在调用 Shutdown() 或收到在 SetShutdownOnSignals() 中注册的信号之一时开始关闭。
-
int GotSignal() const#
查询 Serve() 是否被信号中断。
此方法必须在 Serve() 返回后调用。
- 返回:
int 中断 Serve() 的信号编号(如果有),否则为 0
-
Status Shutdown(const std::chrono::system_clock::time_point *deadline = NULLPTR)#
关闭服务器,阻塞直到当前请求完成。
可以在 Serve() 阻塞时从信号处理程序或其他线程调用。可选设置最后期限。一旦最后期限过期,服务器将等待剩余的运行中调用完成。
应该只被调用一次。
-
virtual Status ListFlights(const ServerCallContext &context, const Criteria *criteria, std::unique_ptr<FlightListing> *listings)#
检索给定可选不透明标准的可用字段列表。
- 参数:
context – [in] 调用上下文。
criteria – [in] 可以为空
listings – [out] 返回的列表迭代器
- 返回:
-
virtual Status GetFlightInfo(const ServerCallContext &context, const FlightDescriptor &request, std::unique_ptr<FlightInfo> *info)#
为指定描述符检索模式和访问计划。
- 参数:
context – [in] 调用上下文。
request – [in] 数据集请求,无论是命名数据集还是命令
info – [out] 返回的 flight info 提供程序
- 返回:
-
virtual Status PollFlightInfo(const ServerCallContext &context, const FlightDescriptor &request, std::unique_ptr<PollInfo> *info)#
检索目标查询的当前状态。
- 参数:
context – [in] 调用上下文。
request – [in] 数据集请求或由之前的 PollFlightInfo 调用返回的描述符
info – [out] 返回的重试 info 提供程序
- 返回:
-
virtual Status GetSchema(const ServerCallContext &context, const FlightDescriptor &request, std::unique_ptr<SchemaResult> *schema)#
检索指定描述符的模式。
- 参数:
context – [in] 调用上下文。
request – [in] 数据集请求,无论是命名数据集还是命令
schema – [out] 返回的 flight schema 提供程序
- 返回:
-
virtual Status DoGet(const ServerCallContext &context, const Ticket &request, std::unique_ptr<FlightDataStream> *stream)#
获取 IPC 有效负载流以在网络上传输。
- 参数:
context – [in] 调用上下文。
request – [in] 不透明票据
stream – [out] 返回的流提供程序
- 返回:
-
virtual Status DoPut(const ServerCallContext &context, std::unique_ptr<FlightMessageReader> reader, std::unique_ptr<FlightMetadataWriter> writer)#
处理从客户端发送的 IPC 有效负载流。
- 参数:
context – [in] 调用上下文。
reader – [in] 一系列上传的记录批次
writer – [in] 将元数据发送回客户端
- 返回:
-
virtual Status DoExchange(const ServerCallContext &context, std::unique_ptr<FlightMessageReader> reader, std::unique_ptr<FlightMessageWriter> writer)#
处理双向 IPC 有效负载流。
- 参数:
context – [in] 调用上下文。
reader – [in] 一系列上传的记录批次
writer – [in] 将数据发送回客户端
- 返回:
-
virtual Status DoAction(const ServerCallContext &context, const Action &action, std::unique_ptr<ResultStream> *result)#
执行操作,返回零个或多个结果的流。
- 参数:
context – [in] 调用上下文。
action – [in] 要执行的操作,包含类型和正文
result – [out] 结果迭代器
- 返回:
-
virtual Status ListActions(const ServerCallContext &context, std::vector<ActionType> *actions)#
检索可用操作的列表。
- 参数:
context – [in] 调用上下文。
actions – [out] 可用操作类型的向量
- 返回:
-
Status Init(const FlightServerOptions &options)#
-
class FlightServerOptions#
公共成员
-
std::shared_ptr<ServerAuthHandler> auth_handler#
使用的身份验证处理程序。
-
std::vector<CertKeyPair> tls_certificates#
使用的 TLS 证书+密钥对列表。
-
bool verify_client#
启用 mTLS 并要求客户端提供证书。
-
std::string root_certificates#
如果使用 mTLS,使用的 PEM 编码的根证书。
-
std::vector<std::pair<std::string, std::shared_ptr<ServerMiddlewareFactory>>> middleware#
要应用的服务器中间件列表,以及用于标识它们的键。
中间件总是按照提供的顺序应用。键重复是错误的。
-
std::shared_ptr<MemoryManager> memory_manager#
用于控制传入数据分配位置的可选内存管理器。
-
std::function<void(void*)> builder_hook#
一个特定于 Flight 实现的回调,用于自定义传输特定的选项。
不保证会被调用。参数类型特定于 Flight 实现。用户应确保链接到与 Flight 相同的传输实现,以避免运行时问题。更多详细信息,请参阅文档中的“在您自己的项目中使用 Arrow C++”。
-
std::shared_ptr<ServerAuthHandler> auth_handler#
-
struct CertKeyPair#
TLS 证书和密钥。
-
class FlightDataStream#
用于生成 IPC 有效载荷序列的接口,该序列将在 FlightData protobuf 消息中发送。
子类:arrow::flight::RecordBatchStream
公共函数
-
virtual arrow::Result<FlightPayload> GetSchemaPayload() = 0#
计算包含序列化 RecordBatch 模式的 FlightPayload。
-
virtual arrow::Result<FlightPayload> GetSchemaPayload() = 0#
-
class FlightMessageReader : public arrow::flight::MetadataRecordBatchReader#
用于读取由客户端上传的 IPC 有效载荷的读取器。
还允许通过 Flight 协议读取应用程序定义的元数据。
公共函数
-
virtual const FlightDescriptor &descriptor() const = 0#
获取此上传的描述符。
-
virtual const FlightDescriptor &descriptor() const = 0#
-
class FlightMetadataWriter#
用于在上传过程中向客户端发送应用程序特定元数据的写入器。
-
class RecordBatchStream : public arrow::flight::FlightDataStream#
FlightDataStream 的基本实现,它将提供一系列要写入流的 FlightData 消息。
公共函数
- 参数:
reader – [输入] 生成记录批处理的序列
options – [输入] 用于写入的 IPC 选项
-
virtual arrow::Result<FlightPayload> GetSchemaPayload() override#
计算包含序列化 RecordBatch 模式的 FlightPayload。
-
virtual arrow::Result<FlightPayload> GetSchemaPayload() = 0
计算包含序列化 RecordBatch 模式的 FlightPayload。
-
class ServerAuthHandler#
Flight 服务的身份验证实现。
身份验证既包括初始协商,也包括每次调用的令牌验证。实现可以选择使用其中一种或两种机制。实现可能需要跟踪某些状态,例如客户端令牌到已认证身份的映射。
子类:arrow::flight::NoOpAuthHandler
公共函数
-
virtual Status Authenticate(const ServerCallContext &context, ServerAuthSender *outgoing, ServerAuthReader *incoming) = 0#
在初始连接时对客户端进行身份验证。
服务器可以随时发送和读取来自客户端的响应。
- 参数:
context – [in] 调用上下文。
outgoing – [输入] 向客户端发送消息的写入器。
incoming – [输入] 从客户端读取消息的读取器。
- 返回:
如果身份验证成功,则返回 Status OK。
-
inline virtual Status IsValid(const ServerCallContext &context, const std::string &token, std::string *peer_identity)#
验证每次调用的客户端令牌。
- 参数:
context – [in] 调用上下文。
token – [输入] 客户端令牌。如果客户端未提供令牌,则可能为空字符串。
peer_identity – [输出] 对端的身份(如果此身份验证方法支持)。
- 返回:
如果令牌有效,则返回 Status OK;如果验证失败,则返回任何其他状态。
-
inline virtual Status IsValid(const std::string &token, std::string *peer_identity)#
验证每次调用的客户端令牌。
- 已弃用
在 13.0.0 版本中已弃用。请改为实现带有 ServerCallContext 版本的 IsValid()。
- 参数:
token – [输入] 客户端令牌。如果客户端未提供令牌,则可能为空字符串。
peer_identity – [输出] 对端的身份(如果此身份验证方法支持)。
- 返回:
如果令牌有效,则返回 Status OK;如果验证失败,则返回任何其他状态。
-
virtual Status Authenticate(const ServerCallContext &context, ServerAuthSender *outgoing, ServerAuthReader *incoming) = 0#
-
class ServerCallContext#
调用状态/上下文数据。
公共函数
-
virtual const std::string &peer_identity() const = 0#
已认证对端的名称(可能是空字符串)
-
virtual const std::string &peer() const = 0#
对端地址(未验证)
-
virtual void AddHeader(const std::string &key, const std::string &value) const = 0#
添加响应头。
这仅在服务器开始发送响应之前有效;通常除非您自己实现 FlightDataStream、ResultStream 或类似接口,或者在 DoExchange 或 DoPut 期间,这通常不是问题。
-
virtual void AddTrailer(const std::string &key, const std::string &value) const = 0#
添加响应尾部。
这仅在服务器发送最终状态之前有效;除非您的 RPC 处理程序启动线程或类似操作,否则这通常不是问题。
-
virtual ServerMiddleware *GetMiddleware(const std::string &key) const = 0#
通过键查找中间件。
不要在请求主体之外维护对该对象的引用。
- 返回:
中间件,如果未找到则返回 nullptr。
-
virtual bool is_cancelled() const = 0#
检查当前 RPC 是否已被取消(由客户端、网络错误等引起)。
-
virtual const CallHeaders &incoming_headers() const = 0#
客户端为此调用发送的头文件。
-
virtual const std::string &peer_identity() const = 0#
-
class ServerMiddleware#
调用的服务器端中间件,按 RPC 实例化。
中间件必须运行迅速且绝对可靠:中间件实例没有办法拒绝调用或报告错误。
子类:arrow::flight::TracingServerMiddleware, arrow::flight::sql::ServerSessionMiddleware
公共函数
-
virtual std::string name() const = 0#
中间件的唯一名称,用作 RTTI 的替代方案。
- 返回:
中间件的字符串名称
-
virtual void SendingHeaders(AddCallHeaders *outgoing_headers) = 0#
发送头部信息之前的回调。
可以添加额外的头部信息,但无法读取已存在的头部信息。
-
virtual std::string name() const = 0#
-
class ServerMiddlewareFactory#
新中间件实例的工厂。
如果添加到服务器,这将为每个 RPC(包括握手)调用,以提供拦截调用的机会。
保证所有服务器中间件方法都在调用 RPC 方法实现的同一线程中调用。
子类:arrow::flight::sql::ServerSessionMiddlewareFactory
公共函数
新调用开始时的回调。
返回非 OK 状态以拒绝给定状态的调用。
- 参数:
info – [输入] 关于调用的信息。
context – [in] 调用上下文。
middleware – [输出] 此调用的中间件实例。如果为空,则不会从此工厂将中间件添加到此调用实例中。
- 返回:
Status 非 OK 状态将拒绝给定状态的调用。之前链中的中间件将调用其 CallCompleted 回调。其他中间件工厂将不会被调用。
-
class SimpleFlightListing : public arrow::flight::FlightListing#
基于 FlightInfo 对象向量的 FlightListing 实现。
这可以迭代一次,然后被消耗。
公共函数
-
virtual arrow::Result<std::unique_ptr<FlightInfo>> Next() override#
从迭代器中检索下一个 FlightInfo。
- 返回:
包含单个 FlightInfo 的 Arrow 结果。如果没有剩余项,则设为 nullptr。
-
virtual arrow::Result<std::unique_ptr<FlightInfo>> Next() override#
-
class SimpleResultStream : public arrow::flight::ResultStream#
基于 Result 对象向量的 ResultStream 实现。
这可以迭代一次,然后被消耗。
错误处理#
错误处理使用普通的 arrow::Status 类,并结合用于 Flight 特定错误代码的自定义 arrow::StatusDetail 对象。
-
enum class arrow::flight::FlightStatusCode : int8_t#
Flight 特定的状态代码。
用于将一些额外的状态代码编码到 Arrow Status 中。
值
-
enumerator Internal#
发生了实现错误。
-
enumerator TimedOut#
请求超时。
-
enumerator Cancelled#
请求被取消。
-
enumerator Unauthenticated#
我们未对远程服务进行身份验证。
-
enumerator Unauthorized#
我们没有权限进行此请求。
远程服务目前无法处理此请求。
-
enumerator Failed#
请求因其他原因失败。
-
enumerator Internal#
-
class FlightStatusDetail : public arrow::StatusDetail#
Status 中 Flight 特定的错误信息。
公共函数
-
virtual const char *type_id() const override#
返回 StatusDetail 类型的唯一 ID(实际上是 RTTI 的拙劣替代品)。
-
virtual std::string ToString() const override#
生成此状态的人类可读描述。
-
FlightStatusCode code() const#
获取 Flight 状态代码。
-
std::string extra_info() const#
获取额外的错误信息。
-
std::string CodeAsString() const#
获取状态代码的人类可读名称。
-
void set_extra_info(std::string extra_info)#
设置额外的错误信息。
公共静态函数
-
static std::shared_ptr<FlightStatusDetail> UnwrapStatus(const arrow::Status &status)#
尝试从任何 Arrow 状态中提取 FlightStatusDetail。
- 返回:
如果可以解包则返回 FlightStatusDetail,否则返回 nullptr
-
virtual const char *type_id() const override#
-
Status arrow::flight::MakeFlightError(FlightStatusCode code, std::string message, std::string extra_info = {})#
为给定的 Flight 特定状态制作适当的 Arrow 状态。
- 参数:
code – Flight 状态代码。
message – 错误消息。
extra_info – 可选的错误额外二进制信息(例如 protobuf)
实现自定义传输#
用于在 Flight 中实现替代网络传输的内部(但不是私有)接口。
要实现传输,请实现 ServerTransport 和 ClientTransport,并向 TransportRegistry 注册所需的 URI 方案。Flight 处理了大部分每个 RPC 的细节;传输仅处理连接并提供 I/O 流实现 (TransportDataStream)。
在服务器端
应用程序继承 FlightServerBase 并重写 RPC 处理程序。
FlightServerBase::Init 将根据赋予它的 Location 方案查找并创建 ServerTransport。
ServerTransport 将启动实际的服务器。(例如,对于 gRPC,它创建一个 gRPC 服务器并注册一个 gRPC 服务。)该服务器将处理连接。
传输应将传入的服务器调用转发到 ServerTransport 上定义的 RPC 处理程序,该处理程序使用此处的接口实现实际的 RPC 处理程序。RPC 处理程序需要的任何 I/O 都由传输特定的 TransportDataStream 实现管理。
ServerTransport 调用 FlightServerBase 以获取实际的应用程序逻辑。
在客户端
应用程序使用 Location 创建 FlightClient。
FlightClient 将根据赋予它的 Location 方案查找并创建 ClientTransport。
当在 FlightClient 上调用方法时,FlightClient 将委托给 ClientTransport。存在一些间接调用,例如对于 DoGet,FlightClient 仅请求 ClientTransport 启动调用并为其提供 I/O 流。“Flight 实现”本身仍然存在于 FlightClient 中。