[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