[ 
https://issues.apache.org/jira/browse/HADOOP-6884?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900390#action_12900390
 ] 

Doug Cutting commented on HADOOP-6884:
--------------------------------------

>  I found at least two three-variable cases in Erik's latest patch.

I missed those, but it's still different from your benchmark, which focussed on 
boxed variables.  Those examples might look something like:

debug("Exception while invoking {} of {}. Retrying.", method.getName(), 
implementation.getClass(), StringUtils.stringifyException(e));

That last parameter would make things slow, but, I'd be surprised if you can 
show that optimizing this substantially improves Hadoop performance, since this 
only runs in the case that a retryable method fails with an exception.  If we 
ever found that such cases were problematic, we might add methods like:

static void debug(String message, Throwable t);
static void debug(String message, Throwable t, Object p1);
static void debug(String message, Throwable t, Object p1, Object p2);
static void debug(String message, Throwable t, Object... parameters);

Perhaps we could submit a patch to slf4j adding such methods there.

The second case could become something like:

debug("for protocol authorization compare ({}):{} with ", clientPrincipal, 
shortName, user.getShortUserName));

In this case all parameters are strings, so no boxing would occur.

> Your benchmark also shows that LOG.isDebugEnabled() provides the best results.

It provides significantly better results in a micro-benchmark.  But 
optimizations that increase code size should show significant improvement in 
real application performance, not just micro-benchmarks.  Until someone's shown 
that this optimization measurably improves end performance, I see no urgency to 
commit it.

> Add LOG.isDebugEnabled() guard for each LOG.debug("...")
> --------------------------------------------------------
>
>                 Key: HADOOP-6884
>                 URL: https://issues.apache.org/jira/browse/HADOOP-6884
>             Project: Hadoop Common
>          Issue Type: Improvement
>    Affects Versions: 0.22.0
>            Reporter: Erik Steffl
>            Assignee: Erik Steffl
>             Fix For: 0.22.0
>
>         Attachments: FunAgain.java, FunAgain.java, HADOOP-6884-0.22-1.patch, 
> HADOOP-6884-0.22.patch
>
>
> Each LOG.debug("...") should be executed only if LOG.isDebugEnabled() is 
> true, in some cases it's expensive to construct the string that is being 
> printed to log. It's much easier to always use LOG.isDebugEnabled() because 
> it's easier to check (rather than in each case reason whether it's necessary 
> or not).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to