[ https://issues.apache.org/jira/browse/HBASE-9768?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13798291#comment-13798291 ]
stack commented on HBASE-9768: ------------------------------ +1 > 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)