You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Heng Chen (JIRA)" <ji...@apache.org> on 2015/10/27 05:42:27 UTC

[jira] [Created] (HBASE-14703) update the per-region stats twice for the call on return

Heng Chen created HBASE-14703:
---------------------------------

             Summary: 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


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)