On Thu, May 6, 2010 at 9:13 AM, Bryan O'Sullivan <b...@serpentine.com> wrote:
> On Wed, May 5, 2010 at 10:51 PM, Michael Snoyman <mich...@snoyman.com>wrote: > >> * When a connection is released, is goes to the end of the pool, so >> connections get used evenly (not sure if this actually matters in practice). >> > > In practice, you're better off letting idle connections stay that way, > because then your DB server can close connections and free up resources. In > other words, when you're done with a connection, put it at the front of the > reuse queue, not the back. > > You'll also want to handle the possibility that a connection that you grab > from the pool has been closed by the server. Many connection pooling > implementations I've seen get this wrong in subtle or expensive ways. > Thanks for the feedback. I've gone ahead and implemented a simple resource pool module. Since I need it to work with monad transformer stacks, I've built it on top of MonadCatchIO-transformers. I've put the code up in a gist on github[1]. I would appreciate if anyone could review this, especially to make sure the exception handling code is correct. block and unblock in particular concern me. Thanks, Michael [1] http://gist.github.com/392078
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe