Re: Aggressive exception handler making extra work for itself.

Jonathan Swartz <[email protected]> Mon, 2 Apr 2007 15:12:16 -0700
Newsgroups gmane.comp.web.mason.devel
Message-ID <[email protected]>
I noticed this behavior while investigating performance at Amzn, but  
then forgot about it. I agree - we should only use Devel::StackTrace  
when needed by our error messages, and perhaps we should allow its  
use to be turned on/off with a parameter at any rate.

Jesse/Dave, have you come up with a workaround or fix for this yet?

Jon

On Mar 19, 2007, at 4:47 PM, Jesse Vincent wrote:

>
> On Mar 19, 2007, at 7:38 PM, Dave Rolsky wrote:
>
>> On Mon, 19 Mar 2007, Jesse Vincent wrote:
>>
>>> So, $m->comp defines a SIG{__DIE__} handler.  Inside Jifty, we make
>>> relatively heavy use of our own microexceptions (trivial eval  
>>> blocks). What
>>> this means is that every time we call eval {} from within code  
>>> that's called
>>> by mason, we generate the overhead of a fairly deep  
>>> Devel::StackTrace.  Is
>>> there some bit of doc I'm missing about how not to hurt myself  
>>> badly?
>>
>> I think you mean exec() defines a signal handler, right?
>
> That's right. Sorry for being imprecise.
>
>> The main reason we do this is we want to ensure that errors are  
>> turned
>> into exception objects, because we use that object and the stack  
>> trace
>> object to display the nice error page.
>
> Sure. And that's something I (and my users) appreciate quite a  
> bit.  It's just a bit painful when I'm doing an eval and handling  
> $@ myself.
>
>> One possible solution might be to not mess with $SIG{__DIE__} when
>> error_mode is set to fatal. Would that help Jifty? I'm assuming  
>> that on a
>> production site you'd set error_mode to fatal, so you'd get the speed
>> benefit there.
>
> That could work.
>
>> Also, could Jifty throw it's micro-exceptions as something other  
>> than a
>> string? Mason will simply rethrow a reference if it gets one, so  
>> you could
>> do something like do:
>
> The problem with that is that as often as not it's deep library  
> code evaling a chunk of perl (very often a CPAN module) that's  
> defined to fail by 'die'ing.
>
>
>>   die { micro => 'foo' };
>
>
> -jesse
> ---------------------------------------------------------------------- 
> ---
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to  
> share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php? 
> page=join.php&p=sourceforge&CID=DEVDEV________________________________ 
> _______________
> Mason-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mason-devel


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV