[ https://issues.apache.org/jira/browse/HBASE-9768?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13799787#comment-13799787 ]
Hudson commented on HBASE-9768: ------------------------------- SUCCESS: Integrated in hbase-0.96-hadoop2 #93 (See [https://builds.apache.org/job/hbase-0.96-hadoop2/93/]) HBASE-9768 Two issues in AsyncProcess (nkeywal: rev 1533613) * /hbase/branches/0.96/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java * /hbase/branches/0.96/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java > 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)