[ https://issues.apache.org/jira/browse/HBASE-14703?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jesse Yates updated HBASE-14703: -------------------------------- Attachment: HBASE-14703-5.2-addendum.patch I'm starting to think that to support stats across all the mutation based calls needs to be reimplememented to support other calls. I'm attaching an addendum to 5.2 (so apply 5.2 and then this patch; makes it easier to see where I'm going with the bigger change). Here's what I'm thinking instead. Results should not have a regionStatistic as there are potentially multiple results for a single region. Instead, MultiResponse should carry the statistics. In the RsRpcServices, we can collect statistics about all the regions affected by the call and then return them once per region Then in asyncProcess we just update all the region stats at once when we receive the MultiResponse. Note this is also cleaner in cases where we return multiple results for the same region; where previously we would return multiple region load stats, now we can return just the most recent. Also, did a little of cleanup to support using this is in the mutateRows by adding an empty result for each mutateRow action that was successfully processed. My only concern is about the viablilty of implementing this w/o breaking wire compatibility. Since this is just adding protobuf fields it will still make the puts correctly, but in the case of upgrading, the statistics will not be correct (actually, missing) from until both sides are upgraded. I don't think this is a widely used feature yet, so I'm not too worried, but thought I should mention it. > 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-5.2-addendum.patch, HBASE-14703-async.patch, > HBASE-14703-start.patch, HBASE-14703-v4.1.patch, HBASE-14703-v4.patch, > HBASE-14703.patch, HBASE-14703_v1.patch, HBASE-14703_v2.patch, > HBASE-14703_v3.patch, HBASE-14703_v5.1.patch, HBASE-14703_v5.2.patch, > HBASE-14703_v5.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)