Remove the old connection pool

It's been deprecated for a long time
This commit is contained in:
Steven Fackler 2014-11-01 16:22:41 -07:00
parent c11cbd6b7d
commit 2da41be987
4 changed files with 0 additions and 150 deletions

View File

@ -145,7 +145,6 @@ mod message;
mod url;
mod util;
pub mod error;
pub mod pool;
pub mod types;
const CANARY: u32 = 0xdeadbeef;

View File

@ -1,112 +0,0 @@
//! A simple connection pool
#![deprecated="Use https://github.com/sfackler/r2d2-postgres instead"]
#![allow(deprecated)]
use std::sync::{Arc, Mutex};
use {ConnectParams, IntoConnectParams, Connection, SslMode};
use error::PostgresConnectError;
struct InnerConnectionPool {
params: ConnectParams,
ssl: SslMode,
pool: Vec<Connection>,
}
impl InnerConnectionPool {
fn add_connection(&mut self) -> Result<(), PostgresConnectError> {
Connection::connect(self.params.clone(), &self.ssl)
.map(|c| self.pool.push(c))
}
}
/// A simple fixed-size Postgres connection pool.
///
/// It can be shared across tasks.
///
/// ## Example
///
/// ```rust,no_run
/// # #![allow(deprecated)]
/// # use postgres::NoSsl;
/// # use postgres::pool::ConnectionPool;
/// let pool = ConnectionPool::new("postgres://postgres@localhost",
/// NoSsl, 5).unwrap();
/// for _ in range(0u, 10) {
/// let pool = pool.clone();
/// spawn(proc() {
/// let conn = pool.get_connection();
/// conn.execute("UPDATE foo SET bar = 1", []).unwrap();
/// });
/// }
/// ```
#[deriving(Clone)]
pub struct ConnectionPool {
pool: Arc<Mutex<InnerConnectionPool>>
}
impl ConnectionPool {
/// Creates a new pool with the specified number of connections.
///
/// Returns an error if the specified number of connections cannot be
/// created.
pub fn new<T: IntoConnectParams>(params: T, ssl: SslMode, pool_size: uint)
-> Result<ConnectionPool, PostgresConnectError> {
let mut pool = InnerConnectionPool {
params: try!(params.into_connect_params()),
ssl: ssl,
pool: vec![],
};
for _ in range(0, pool_size) {
try!(pool.add_connection());
}
Ok(ConnectionPool {
pool: Arc::new(Mutex::new(pool))
})
}
/// Retrieves a connection from the pool.
///
/// If all connections are in use, blocks until one becomes available.
pub fn get_connection(&self) -> PooledConnection {
let mut pool = self.pool.lock();
loop {
match pool.pool.pop() {
Some(conn) => {
return PooledConnection {
pool: self.clone(),
conn: Some(conn),
};
}
None => pool.cond.wait()
}
}
}
}
/// A Postgres connection pulled from a connection pool.
///
/// It will be returned to the pool when it falls out of scope, even due to
/// task failure.
pub struct PooledConnection {
pool: ConnectionPool,
// TODO remove the Option wrapper when drop takes self by value
conn: Option<Connection>
}
impl Drop for PooledConnection {
fn drop(&mut self) {
let mut pool = self.pool.pool.lock();
pool.pool.push(self.conn.take().unwrap());
pool.cond.signal();
}
}
impl Deref<Connection> for PooledConnection {
fn deref<'a>(&'a self) -> &'a Connection {
self.conn.as_ref().unwrap()
}
}

View File

@ -1,36 +0,0 @@
#![allow(deprecated)]
use std::comm;
use std::sync::Future;
use postgres::NoSsl;
use postgres::pool::ConnectionPool;
#[test]
// Make sure we can take both connections at once and can still get one after
fn test_pool() {
let pool = or_panic!(ConnectionPool::new("postgres://postgres@localhost",
NoSsl, 2));
let (s1, r1) = comm::channel();
let (s2, r2) = comm::channel();
let pool1 = pool.clone();
let mut fut1 = Future::spawn(proc() {
let _conn = pool1.get_connection();
s1.send(());
r2.recv();
});
let pool2 = pool.clone();
let mut fut2 = Future::spawn(proc() {
let _conn = pool2.get_connection();
s2.send(());
r1.recv();
});
fut1.get();
fut2.get();
pool.get_connection();
}

View File

@ -48,7 +48,6 @@ macro_rules! or_panic(
)
mod types;
mod pool;
#[test]
fn test_non_default_database() {