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