Hello Duncan. On Tue, Mar 25, 2014 at 04:42:56PM +1300, Duncan McEwan wrote: > > First, a brief recap. We have a web-based application that runs as a FosWiki > plugin under Apache/fcgid.
Could you post the fcgid configuration details for us? https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html > The database connection used by this application should be persistent > due to the application calling DBI->connect_cached() on each invocation. Persistent within a single backend process, yes. > The new piece of information that I have discovered recently is that on a > call to connect_cached() which *doesn't* return the cached database handle, > the database driver handle reference passed into connect_cached() has changed. > Since the dbh cache is obtained from "$drh->{CachedKids} ||= {}" I can now > understand why the cached handled is not found! > > What I can't understand is why the driver handle passed into connect_cached() > has changed! Neither can I. > I've got 1000's of lines of debugging showing this happening. Some of it > is my own, inserted as print statements or cluck calls directly into DBI.pm > and some of it the standard DBI debugging set to level 9. There is way too > much to include in this message, but I've included some small extracts below > to illustrate what I am seeing. What you've included doesn't show the drh changing. I suggest you focus on that. Specifically the code path taken by the request that notices that the drh has changed, _and_ the code path taken by the _previous_ request _in the same process_. > One thing I did just notice is that our application calls connect_cached() > in the way shown in the DBI pod - that is: > > my $dbh = DBI->connect_cached(...) > > I don't know enough about perl internals to know exactly what this does. > But I did wonder if something like the following might be better given the > persistent nature of our application provided by fcgid. > > my $dbi = new DBI; > my $dbh = $dbi->connect_cached(...) No. Using new DBI (or DBI->new) isn't a valid way to use the DBI. Just DBI->connect_cached is fine. Tim.