[
https://issues.apache.org/jira/browse/HBASE-9768?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nicolas Liochon updated HBASE-9768:
-----------------------------------
Attachment: 9768.v1.patch
> Two issues in AsyncProcess
> --------------------------
>
> Key: HBASE-9768
> URL: https://issues.apache.org/jira/browse/HBASE-9768
> Project: HBase
> Issue Type: Bug
> Affects Versions: 0.96.0
> Reporter: Jeffrey Zhong
> Assignee: Nicolas Liochon
> Fix For: 0.98.0, 0.96.1
>
> Attachments: 9768.v1.patch
>
>
> There may exist two issues in Asyncprocess code as following:
> 1) In Htable#backgroundFlushCommits, we have following code:
> {code}
> if (ap.hasError()) {
> if (!clearBufferOnFail) {
> // if clearBufferOnFailed is not set, we're supposed to keep the
> failed operation in the
> // write buffer. This is a questionable feature kept here for
> backward compatibility
> writeAsyncBuffer.addAll(ap.getFailedOperations());
> }
> RetriesExhaustedWithDetailsException e = ap.getErrors();
> ap.clearErrors();
> throw e;
> }
> {code}
> In a rare situation like the following:
> When there are some updates ongoing, a client call Put(internally
> backgroundFlushCommits get triggered). Then comes the issue:
> The first ap.hasError() returns false and the second ap.hasError() returns
> true. So we could throw exception to caller while writeAsyncBuffer isn't
> empty.(some updates are still on going).
> If a client retry with different values for the same keys, we could end up
> with nondeterministic state.
> 2) The following code only update cache for the first row. We should update
> cache for all the regions inside resultForRS because actions are sent to
> multiple regions per RS
> {code}
> if (failureCount++ == 0) { // We're doing this once per location.
> hConnection.updateCachedLocations(this.tableName, row.getRow(),
> result, location);
> if (errorsByServer != null) {
> errorsByServer.reportServerError(location);
> canRetry = errorsByServer.canRetryMore();
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.1#6144)