[Dbix-class] "fork- and thread-safe"
Matt S Trout
dbix-class at trout.me.uk
Fri Jun 23 21:35:42 CEST 2006
Mark Hedges wrote:
> I tried to explain on the Mason list that DBIx::Class is "fork-
> and thread-safe" in a discussion on how (why not) to cache a
> DBI connection at Apache start-up.
>
> It occurred to me I don't really know what this means, and I
> couldn't find in previous discussions or the DBIC::Storage::DBI
> man page what actually happens.
>
> If I connect in the startup.pl, does that mean that each forked
> child shares the connection? (I'm guessing no.)
>
> If I connect in startup.pl under an Apache2 threaded worker
> model, does that mean each mod_perl thread shares the
> connection?
>
> How does this actually work under FastCGI?
>
> Is there any way for multiple processes or threads to really
> share a DBIC connection?
It's safe because it doesn't try and share the $dbh. If it detects a fork or
thread spawn, it dumps the $dbh and re-connects - meaning you can grab the
$schema at startup and everything will still Just Work (c.f.
Catalyst::Model::DBIC::Schema, for e.g.).
Well, unless you load Apache::DBI, in which case "good luck". I believe
they've finally fixed one showstopping bug in the last point release or two
but I still wouldn't trust it within a quarter mile of my code.
--
Matt S Trout Offering custom development, consultancy and support
Technical Director contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd. mst (at) shadowcatsystems.co.uk for more information
+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +
More information about the Dbix-class
mailing list