After running some DProf exec graphs I see the following as the reason for
dying (which now seems to be very DBD::Oracle-centric and perhaps a
possible bug):

   GLGC::Mod1::DBScan::new  # Create top-level object
      RA::Root::new
      GxRte::new
      GLGC::Mod1::new
         RA::Root::new
      GLGC::Mod1::getDBH
         DBI::connect
            DBI::install_driver
            DBI::dr::connect
               DBD::Oracle::dr::connect
                  DBD::Oracle::ORA_OCI
                  DBI::_new_dbh
                     DBI::_handles
                     DBI::_new_handle
                        DBI::st::TIEHASH
                        DBI::_setup_handle
                  DBD::Oracle::db::_login  # First call to Oracle login
works fine
            DBI::db::STORE
            DBI::db::STORE
      GLGC::Mod1::DBScan::DataSet::new  # Create sub-object, also HAS-A
GLGC::Mod1 object
         RA::Root::new
         GxRte::new
         GLGC::Mod1::new
            RA::Root::new
         GLGC::Mod1::getDBH  # GLGC::Mod1's db initalization routine, which
worked fine above
            DBI::connect
               DBI::install_driver
               DBI::dr::connect
                  DBD::Oracle::dr::connect
                     DBD::Oracle::ORA_OCI
                     DBI::_new_dbh
                        DBI::_handles
                        DBI::_new_handle
                           DBI::st::TIEHASH
                           DBI::_setup_handle
                     DBD::Oracle::db::_login  # But for some reason dies
here, same init string as above
               DBI::dr::errstr
               Carp::carp
                  Carp::shortmess  # Error occurs here, can't find
Carp/Heavy.pm
[ all modules then run DESTROY routines ...]

Checking the source for DBD::Oracle it looks like the _login routine is in
the XS module, which I have not yet hunted down to read. Does anyone
(TimB?) have any idea why some sort of login failure would result in a
state in which the system could not find Carp/Heavy.pm but in which @INC
looks to be completely intact (see first post below)?

Alternatively, why would db::_login fail in the third iteration of a series
of double GLGC::Mod1 module creations and destructions when it worked just
fine in the first two iterations? I've even tried to specifcally undef the
instances rather than just letting them go out of scope to no avail. Nor
does explicitly disconnecting the DBH reference within the GLGC::Mod1
instance before undef'ing the instance seem to help.

Has anyone seen anything like this before?
- j

-------------------------------------------------
James Diggans
Bioinformatics Programmer
Gene Logic, Inc.
Phone: 301.987.1756
FAX: 301.987.1701




                                                                                       
             
                    jdiggans@genel                                                     
             
                    ogic.com             To:     [EMAIL PROTECTED]                    
             
                                         cc:                                           
             
                    10/22/01 05:12       Subject:     Can't find Carp/Heavy.pm ...     
             
                    PM                                                                 
             
                                                                                       
             
                                                                                       
             





What's Carp have to do w/ the DBI, you ask? Well, I have a script that
iterates over a series of activities, creating an instance of a different
module per activity. Each of these sub-modules makes use of the DBI and
DBD::Oracle.

No matter in which order the activities are executed the THIRD iteration
always fails out (eliminating, IMHO, syntax error as a source) with:

Root::Module1::SubModule1::Module1c debugging on
Root::Module1 - No existing connection, connecting to database ...
Can't locate Carp/Heavy.pm in @INC (@INC contains:
/home/jdiggans/pubSun /home/jdiggans/pub
/usr/local/lib/perl5/5.6.0/sun4-solaris /usr/local/lib/perl5/5.6.0
/usr/local/lib/perl5/site_perl/5.6.0/sun4-solaris
/usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl .)
at /usr/local/lib/perl5/5.6.0/Carp.pm line 109.

Now clearly /usr/local/lib/perl5/5.6.0/Carp/Heavy.pm exists and is
world-readable, since it works for the first two iterations as well as
every other script running on this system. I've tracked this problem to
DBI.pm since the line indicated by the error is in Carp.pm's shortmess()
routine, called only by its carp() and croak() methods. I use only confess
() in my modules, but croak() and carp() are used extensively in DBI.pm
though since Carp is dying I have no way to officially track it to a line#
in DBI.

My question, then, is has anyone ever seen something like this? The
sub-objects should be going out of scope with each interation so extra db
connections certainly still shouldn't be laying around ... and why always
on the third iteration? Any ideas/help/things to do to get more
information/etc are greatly appreciated.

Regards,
-j

-------------------------------------------------
James Diggans
Bioinformatics Programmer
Gene Logic, Inc.
Phone: 301.987.1756
FAX: 301.987.1701


Reply via email to