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

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

{quote}
Looking closer at the patch, I'm a bit concerned with how retries will work. 
Since the AsyncProcess handles retries, we shouldn't be calling the 
callable.callWithRetries, right? Then we would get two sets of retries with the 
callable nested under the AsyncProcess. Can't we just use the standard AP 
timeout then as well (its not something the user changes per-call)?
{quote}
Indeed, it is a problem.  I have thought that callable.callWithRetries could 
handle timeout option inside,  but i found that we can use the standard AP 
timeout to do it as you mentioned. I will do it.
{quote}
that's only going to be applicable for the checkAndXXX cases, right?
{quote}
yeah, it is only for checkAndXXX.  
{quote}
In the meantime, lets just focus on supporting the mutateRow and then later we 
can fix checkAndMutate along with the other checkAndXXXX methods.
{quote}
OK. Currently, we can leave checkAndMutate without AP before we can handle it 
more gracefully...
{quote}
For mutateRow, maybe its better to just check to see if it has any Results, 
rather than checking to see if there is a statistic tracker? It ties more into 
why the ResponseConverter won't work, rather than why there are no Results in 
the response and leave that information in a comment around the check for the 
count of results.
{quote}
Sounds reasonable, i will do it.

Other tips:
 *  currently,  in mutateRow server side,  if hbase.client.backpressure.enabled 
ON,  response.getRegionActionResultCount() will be more than 
request.getRegionActionCount().  I fix it in server side, so we can pass check 
in ResponseConverter.  
 * similarly,  because of no results in response of mutateRow,  we can't add 
loadstats into result in ResponseConverter.  I fix it too.









> not collect stats when call HTable.mutateRow 
> ---------------------------------------------
>
>                 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-async.patch, HBASE-14703-start.patch, 
> HBASE-14703.patch, HBASE-14703_v1.patch, HBASE-14703_v2.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)

Reply via email to