perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adam Prime <adam.pr...@utoronto.ca>
Subject Re: Apache::DBI connect
Date Thu, 07 Nov 2013 16:44:40 GMT
perl -e "if ('0E0') { print qq[hi\n] }"
hi

OE0 as a string evaluates to true.  If you use it as a bareword / 
numeric then it's false, which is what your eval example below is doing.

Adam


On 13-11-07 11:29 AM, Xinhuan Zheng wrote:
> one correct - In both cases, the return value is evaluated to false.
>
> How do you distinguish?
>
> - xinhuan
>
> From: Xinhuan Zheng <xzheng@christianbook.com
> <mailto:xzheng@christianbook.com>>
> Date: Thursday, November 7, 2013 11:12 AM
> To: Perrin Harkins <pharkins@gmail.com <mailto:pharkins@gmail.com>>
> Cc: mod_perl list <modperl@perl.apache.org <mailto:modperl@perl.apache.org>>
> Subject: Re: Apache::DBI connect
>
>> I don't actually understand why you did that.  What was wrong with the normal ping?
>
> With Oracle DRCP, even though ping succeeds, the connection to the
> server process is actually terminated. Or ora_ping() may return 0E0
> "zero but true" and undef. I don't know. ora_ping() is foreign to me. I
> made the change based on what Apache::DBI the document said.
>
>> In any case, there's no need to change the Apache::DBI code, even with your "select
1 from dual" test.   It returns a true value (0E0) if it succeeds and a false value (undef)
if it fails.
>
> In both cases, the return value is evaluated to true:
>
> 200: if ($Connected{$Idx} and (!$needping or eval{$Connected{$Idx}->ping}))
>
> eval{0E0} and eval{undef} both return true. I did test that. How do you
> distinguish?
>
>> Did your script succeed in reconnecting after it lost the connection?
>
> Yes.
>
>> Yes, I haven't forgotten about that, but I haven't had time to work on it yet.  You
can try fixing it yourself by looking at the code in Apache::DBI that checks if the server
is starting under apache 1.x.  Otherwise, I will eventually get to it.
>
> I don't understand that piece of code. I can't do the change. Hope you
> can help.
>
> - xinhuan
>
> From: Perrin Harkins <pharkins@gmail.com <mailto:pharkins@gmail.com>>
> Date: Thursday, November 7, 2013 11:00 AM
> To: Xinhuan Zheng <xzheng@christianbook.com
> <mailto:xzheng@christianbook.com>>
> Cc: mod_perl list <modperl@perl.apache.org <mailto:modperl@perl.apache.org>>
> Subject: Re: Apache::DBI connect
>
> On Thu, Nov 7, 2013 at 9:46 AM, Xinhuan Zheng <xzheng@christianbook.com
> <mailto:xzheng@christianbook.com>> wrote:
>>The $ok is undef. In the case if the test does succeed (like the first select), $ok
returns 0E0.
>
> That all sounds good.  0E0 is a true value in Perl.  It means "zero but
> true."  And undef is a false value.  You don't need to test for undef.
>
>> Since I changed DBD::Oracle subroutine ping to use 'select 1 from dual',
>
> I don't actually understand why you did that.  What was wrong with the
> normal ping?
>
> In any case, there's no need to change the Apache::DBI code, even with
> your "select 1 from dual" test.  It returns a true value (0E0) if it
> succeeds and a false value (undef) if it fails.
>
> Did your script succeed in reconnecting after it lost the connection?
>
>> I have another request. The Apache::DBI cached a dead database handle for apache
version 1.3.42 if  startup.pl <http://startup.pl> create a database handle. The apache
> child processes inherits this dead handle. It doesn't cause application
> error but it does take memory space. If there is many apache processes,
> that's not good. Can you please identify and change the code for this
> problem?
>
> Yes, I haven't forgotten about that, but I haven't had time to work on
> it yet.  You can try fixing it yourself by looking at the code in
> Apache::DBI that checks if the server is starting under apache 1.x.
>   Otherwise, I will eventually get to it.
>
> - Perrin
>


Mime
View raw message