riak-1.1.2.3: A Haskell client for the Riak decentralized data store

Copyright(c) 2011 MailRank Inc.
LicenseApache
MaintainerMark Hibberd <mark@hibberd.id.au>, Nathan Hunter <nhunter@janrain.com>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Network.Riak.Connection.Pool

Description

A high-performance striped pooling abstraction for managing connections to a Riak cluster. This is a thin wrapper around Pool.

Synopsis

Documentation

data Pool Source #

A pool of connections to a Riak server.

This pool is "striped", i.e. it consists of several sub-pools that are managed independently.

The total number of connections that can possibly be open at once is maxConnections * numStripes.

Instances

Eq Pool Source # 

Methods

(==) :: Pool -> Pool -> Bool #

(/=) :: Pool -> Pool -> Bool #

Show Pool Source # 

Methods

showsPrec :: Int -> Pool -> ShowS #

show :: Pool -> String #

showList :: [Pool] -> ShowS #

client :: Pool -> Client Source #

Client specification. The client ID is ignored, and always regenerated automatically for each new connection.

create Source #

Arguments

:: Client

Client configuration. The client ID is ignored, and always regenerated automatically for each new connection.

-> Int

Stripe count. The number of distinct sub-pools to maintain. The smallest acceptable value is 1.

-> NominalDiffTime

Amount of time for which an unused connection is kept open. The smallest acceptable value is 0.5 seconds.

The elapsed time before closing may be a little longer than requested, as the reaper thread wakes at 2-second intervals.

-> Int

Maximum number of connections to keep open per stripe. The smallest acceptable value is 1.

Requests for connections will block if this limit is reached on a single stripe, even if other stripes have idle connections available.

-> IO Pool 

Create a new connection pool.

idleTime :: Pool -> NominalDiffTime Source #

Amount of time for which an unused connection is kept open. The smallest acceptable value is 0.5 seconds.

The elapsed time before closing may be a little longer than requested, as the reaper thread wakes at 1-second intervals.

maxConnections :: Pool -> Int Source #

Maximum number of connections to keep open per stripe. The smallest acceptable value is 1.

Requests for connections will block if this limit is reached on a single stripe, even if other stripes have idle connections available.

numStripes :: Pool -> Int Source #

Stripe count. The number of distinct sub-pools to maintain. The smallest acceptable value is 1.

withConnection :: Pool -> (Connection -> IO a) -> IO a Source #

Temporarily take a connection from a Pool, perform an action with it, and return it to the pool afterwards.

  • If the pool has a connection available, it is used immediately.
  • Otherwise, if the maximum number of connections has not been reached, a new connection is created and used.
  • If the maximum number of connections has been reached, this function blocks until a connection becomes available, then that connection is used.

If the action throws an exception of any type, the Connection is destroyed, and not returned to the pool.

It probably goes without saying that you should never call disconnect on a connection, as doing so will cause a subsequent user (who expects the connection to be valid) to throw an exception.

withConnectionM :: MonadBaseControl IO m => Pool -> (Connection -> m a) -> m a Source #

Temporarily take a connection from a Pool, perform an action with it, and return it to the pool afterwards. This is a generalization of withConnection, which remains specialized to prevent breaking source compatibility with existing code.

  • If the pool has a connection available, it is used immediately.
  • Otherwise, if the maximum number of connections has not been reached, a new connection is created and used.
  • If the maximum number of connections has been reached, this function blocks until a connection becomes available, then that connection is used.

If the action throws an exception of any type, the Connection is destroyed, and not returned to the pool.

It probably goes without saying that you should never call disconnect on a connection, as doing so will cause a subsequent user (who expects the connection to be valid) to throw an exception.