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

Reply via email to