[
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)