hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Heng Chen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-14703) update the per-region stats twice for the call on return
Date Fri, 30 Oct 2015 11:04:27 GMT

    [ https://issues.apache.org/jira/browse/HBASE-14703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14982366#comment-14982366
] 

Heng Chen commented on HBASE-14703:
-----------------------------------

[~jesse_yates]  When i dig into the logic, i found some new problems.... It confuses me.....

Current logic seems that server stats will not update twice....  But {{StatsTrackingRpcRetryingCaller}}
still useless...

relates code in {{StatsTrackingRpcRetryingCaller.updateStatsAndUnwrap}}.
{code}
  private T updateStatsAndUnwrap(T result, RetryingCallable<T> callable) {
   .....
    // mutli-server callables span multiple regions, so they don't have a location,
    // but they are region server callables, so we have to handle them when we process the
    // result in AsyncProcess#receiveMultiAction, not in here
    if (callable instanceof MultiServerCallable) {
      return result;
    }
   .....
  }
{code}

It means MultiResponse will be returned and not update serverStats, only single server callable
will be processed by {{StatsTrackingRpcRetryingCaller}}

But  in server,  we got RegionLoadStats by {{HRegion.getRegionStats}},  
and this method seems to be called only in {{RSRpcServices.doBatchOp}} and {{RSRpcServices.mutateRows}}.
Is that means only MultiResponse has stats??  



> update the per-region stats twice for the call on return
> --------------------------------------------------------
>
>                 Key: HBASE-14703
>                 URL: https://issues.apache.org/jira/browse/HBASE-14703
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Heng Chen
>            Assignee: Heng Chen
>         Attachments: HBASE-14703.patch
>
>
> In {{AsyncProcess.SingleServerRequestRunnable}}, it seems we update serverStatistics
twice.
> The first one is that we wrapper {{RetryingCallable}}  by {{StatsTrackingRpcRetryingCaller}},
and do serverStatistics update when we call {{callWithRetries}} and {{callWithoutRetries}}.
Relates code like below:
> {code}
>   @Override
>   public T callWithRetries(RetryingCallable<T> callable, int callTimeout)
>       throws IOException, RuntimeException {
>     T result = delegate.callWithRetries(callable, callTimeout);
>     return updateStatsAndUnwrap(result, callable);
>   }
>   @Override
>   public T callWithoutRetries(RetryingCallable<T> callable, int callTimeout)
>       throws IOException, RuntimeException {
>     T result = delegate.callWithRetries(callable, callTimeout);
>     return updateStatsAndUnwrap(result, callable);
>   }
> {code}
> The secondary one is after we get response, in {{receiveMultiAction}}, we do update again.

> {code}
> // update the stats about the region, if its a user table. We don't want to slow down
> // updates to meta tables, especially from internal updates (master, etc).
> if (AsyncProcess.this.connection.getStatisticsTracker() != null) {
>   result = ResultStatsUtil.updateStats(result,
>   AsyncProcess.this.connection.getStatisticsTracker(), server, regionName);
> }
> {code}
> It seems that {{StatsTrackingRpcRetryingCaller}} is NOT necessary,  remove it?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message