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
HBase
Thrift Spec - thrift-pool-tutorial – implements Connection Pools for the client used in the official thrift tutorial
Structs§
- Make
Thrift Connection From Addrs - A
MakeThriftConnection
that attempts to create new connections from aToSocketAddrs
and aFromProtocol
- Thrift
Connection Manager - An implementor of
bb8::ManageConnection
and/orr2d2::ManageConnection
.T
should aMakeThriftConnection
andT::Output
should be aThriftConnection
Traits§
- From
Protocol - Create self from a
TInputProtocol
and 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
ThriftConnection
s - Thrift
Connection - Checks the validity of the connection