Re: DBI Mysql Driver Handle Mysteriously Changes!

Tim Bunce <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <[email protected]>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.