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

Portabilityportable
Stabilityexperimental
MaintainerBryan O'Sullivan <bos@mailrank.com>

Network.Riak.Connection.Pool

Description

A high-performance striped pooling abstraction for managing connections to a Riak cluster.

"Striped" means that a single Pool consists of several sub-pools, each managed independently. A stripe size of 1 is fine for many applications, and probably what you should choose by default. Larger stripe sizes will lead to reduced contention in high-performance multicore applications, at a trade-off of causing the maximum number of simultaneous connections to grow.

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

client :: Pool -> ClientSource

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

createSource

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 -> NominalDiffTimeSource

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.

maxConnections :: Pool -> IntSource

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 -> IntSource

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

withConnection :: Pool -> (Connection -> IO a) -> IO aSource

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, expecting the connection to be valid, to throw an exception.