Crate thrift_pool[−][src]
Expand description
This library provides a way easily to implement Connection Pools for any thrift::TThriftClient,
which can then be used alongside [bb8] and/or r2d2
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()?;More 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
A MakeThriftConnection that attempts to create new connections
from a ToSocketAddrs and a FromProtocol
An implementor of [bb8::ManageConnection] and/or r2d2::ManageConnection.
T should a MakeThriftConnection and T::Output should be a ThriftConnection
Traits
Create self from a TInputProtocol and a TOutputProtocol
Create self from a TReadTransport
Create self from a TWriteTransport
A trait that creates new ThriftConnections
Checks the validity of the connection
