Expand description
This library provides a simple way implement bb8 and/or r2d2 Connection Pools
for any TThriftClient
§Usage
There are 2 possible use cases
§As a library
If you’re implementing a library that provides a (possibly generated) thrift client,
you should implement the ThriftConnection and FromProtocol traits
for that client
// A typical generated client looks like this
struct MyThriftClient<Ip: TInputProtocol, Op: TOutputProtocol> {
i_prot: Ip,
o_prot: Op,
}
impl<Ip: TInputProtocol, Op: TOutputProtocol> FromProtocol for MyThriftClient<Ip, Op> {
type InputProtocol = Ip;
type OutputProtocol = Op;
fn from_protocol(
input_protocol: Self::InputProtocol,
output_protocol: Self::OutputProtocol,
) -> Self {
MyThriftClient {
i_prot: input_protocol,
o_prot: output_protocol,
}
}
}
impl<Ip: TInputProtocol, Op: TOutputProtocol> ThriftConnection for MyThriftClient<Ip, Op> {
type Error = thrift::Error;
fn is_valid(&mut self) -> Result<(), Self::Error> {
Ok(())
}
fn has_broken(&mut self) -> bool {
false
}
}
§As an application
If you’re implementing an application that uses a (possibly generated) thrift client that
implements FromProtocol and ThriftConnection (see previous section), you can use
r2d2 or bb8 (make sure to read their documentations) along with
ThriftConnectionManager to create Connection Pools for the client
type Client = MyThriftClient<
TCompactInputProtocol<TFramedReadTransport<ReadHalf<TTcpChannel>>>,
TCompactOutputProtocol<TFramedWriteTransport<WriteHalf<TTcpChannel>>>,
>;
// create a connection manager
let manager = MakeThriftConnectionFromAddrs::<Client, _>::new("localhost:9090")
.into_connection_manager();
// we're able to create bb8 and r2d2 Connection Pools
let bb8 = bb8::Pool::builder().build(manager.clone()).await?;
let r2d2 = r2d2::Pool::builder().build(manager)?;
// get a connection
let conn1 = bb8.get().await?;
let conn2 = r2d2.get()?;§Examples
- hbase-thrift – the project from which this
library was extracted. implements Connection Pools for the client generated from the
HBaseThrift Spec - thrift-pool-tutorial – implements Connection Pools for the client used in the official thrift tutorial
Structs§
- Make
Thrift Connection From Addrs - A
MakeThriftConnectionthat attempts to create new connections from aToSocketAddrsand aFromProtocol - Thrift
Connection Manager - An implementor of
bb8::ManageConnectionand/orr2d2::ManageConnection.Tshould aMakeThriftConnectionandT::Outputshould be aThriftConnection
Traits§
- From
Protocol - Create self from a
TInputProtocoland aTOutputProtocol - From
Read - Create self from a
Read - From
Read Transport - Create self from a
TReadTransport - From
Write - Create self from a
Write - From
Write Transport - Create self from a
TWriteTransport - Make
Thrift Connection - A trait that creates new
ThriftConnections - Thrift
Connection - Checks the validity of the connection