Hi,

I am trying to debug a rather nasty problem using DBD::Oracle and enabled tracing with DBI_TRACE=10=x.x. As soon as I did this I get the following on stderr. Unfortunately, the code is doing quite a bit at this point (see below). As you will see I am using DBIx::Log4perl so I'm quite prepared to believe the issue is there but I'm not sure what the issue is.

SV = PVHV(0x8eb2ba0) at 0x8ebe35c
 REFCNT = 0
 FLAGS = (RMG,SHAREKEYS)
 IV = 12
 NV = 0
 MAGIC = 0x8eb5be8
   MG_VIRTUAL = 0
   MG_TYPE = PERL_MAGIC_ext(~)
   MG_FLAGS = 0x02
     REFCOUNTED
   MG_OBJ = 0x8ebe788
       SV = PVMG(0x8de4280) at 0x8ebe788
         REFCNT = 1
         FLAGS = (OBJECT)
         IV = 0
         NV = 0
         PV = 0x8ec5710 ""
         CUR = 0
         LEN = 220
         STASH = 0x8e11fdc     "DBD::Oracle::st_mem"
 STASH = 0x83b3378     "DBIx::Log4perl::st"
 ARRAY = 0x8eb5c28  (0:9, 1:4, 2:1, 3:2)
 hash quality = 77.9%
 KEYS = 12
 FILL = 7
 MAX = 15
 RITER = -1
 EITER = 0x0
(in cleanup) panic: DESTROY (dbih_clearcom) inner handle HASH is not a h
ash ref at /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/db.pm line 55.

Line 55 in db.pm is the last line below:

sub do {
 my ($dbh, @args) = @_;
 my $h = $dbh->{private_DBIx_Log4perl};

 $h->{Statement} = $args[0];
 $dbh->_dbix_l4p_debug('do', @args)
   if ($h->{logmask} & DBIX_L4P_LOG_INPUT);

 my $affected = $dbh->SUPER::do(@args);

As far as I can see the code is doing one of the following dos:

do 'insert into xxx.job_audit (job_id, client_reference, queued_date_time_utc, arguments, job_repost) values(?,?,utc_timestamp(), substr(?, 0, 4000), ?)',undef, '450281',undef,' $VAR1 = {\'priority\' => 1,\'jobid\' => \'450281\',\'args\' => { },\'name\' => \'market_actions\',\'type\' => \'local\',\'jobflags\' => \'1\'};',undef];
affected: 1
do 'update xxx.job_audit set started_date_time_utc = utc_timestamp() where job_id = ?',undef,'450281'];
affected: 1
do 'update xxx.job_audit set finished_date_time_utc = utc_timestamp(), completion_status = ?, error_string = substr(?, 0, 500), job_repost = (case when client_reference is null then null else ? end) where job_id = ? -- run_queue',undef,0,undef,0,'450281'];
affected: 1

I can find in the following in dbih_inner

   /* extra checks if being paranoid */
   if (DBIS->debug && (!SvROK(hrv) || SvTYPE(SvRV(hrv)) != SVt_PVHV)) {
        if (!what)
            return NULL;
        sv_dump(orv);
        croak("panic: %s inner handle %s is not a hash ref",
                what, neatsvpv(hrv,0));
   }

but I'm not sure what it is croaking about. Is this something I need to worry about?

Thanks.

Martin

Reply via email to