On Thu, Mar 27, 2014 at 04:43:41PM +1300, Duncan McEwan wrote:
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.
Then maybe I'm mis-interpreting the debugging I'm seeing?
No, nevermind, I was. Thanks.
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_.
Yes. I had been looking at that. Within DBI.pm I've inserted calls to
cluck so I could see the stack trace both the case when a cached database
handle is returned and when a new one is created. There were *sometimes*
differences in the call stack between those times, but sometimes not.
At the moment I only turn DBI tracing on in the connect_cached() call and
turn it off again before the call returns. I did that because I was worried
about the amount of output that would be produced if I left tracing on.
But perhaps that is what I will have to do.
Perhaps you don't need to output it. Call $stacktrace = Carp::longmess
and only output it if the stacktrace is different to the last one, or
some similar logic.
Also try turning on $drh-{TraceLevel} after the $dbh is created.
That'll then log just future connect_cached calls *and* handle
destruction, which might be useful.
A potential further complication that I didn't mention previously is that
our application (which I *did* mention is written as a foswiki plugin)
uses the CGI::Application perl package. From a very quick look at its
code, it does seem to know about the DBI and could perhaps be doing something
too clever which is causing us problems. I'll look more into that as
well.
I didn't see anything suspicious in CGI::Application
https://metacpan.org/source/MARKSTOS/CGI-Application-4.50/lib/CGI/Application.pm
or CGI::Application::Plugin::DBH
https://metacpan.org/source/FREW/CGI-Application-Plugin-DBH-4.04/lib/CGI/Application/Plugin/DBH.pm
For more areas to dig, note the mention of dbi_connect_method
in https://metacpan.org/pod/DBI#connect and
https://metacpan.org/source/TIMB/DBI-1.631/DBI.pm#L571
Keep focused on why a new drh appears.
See https://metacpan.org/source/TIMB/DBI-1.631/DBI.pm#L652
Perhaps something is altering %DBI::installed_drh
Tim.