HBASE-26027 The calling of HTable.batch blocked at AsyncRequestFuture… (#3419)
* HBASE-26027 The calling of HTable.batch blocked at AsyncRequestFutureImpl.waitUntilDone caused by ArrayStoreException
(cherry picked from commit 1d6eb77ef8
)
This commit is contained in:
parent
c50867348b
commit
fe6c75cb50
|
@ -1140,7 +1140,15 @@ class AsyncRequestFutureImpl<CResult> implements AsyncRequestFuture {
|
||||||
@Override
|
@Override
|
||||||
public void waitUntilDone() throws InterruptedIOException {
|
public void waitUntilDone() throws InterruptedIOException {
|
||||||
try {
|
try {
|
||||||
waitUntilDone(Long.MAX_VALUE);
|
if (this.operationTimeout > 0) {
|
||||||
|
// the worker thread maybe over by some exception without decrement the actionsInProgress,
|
||||||
|
// then the guarantee of operationTimeout will be broken, so we should set cutoff to avoid
|
||||||
|
// stuck here forever
|
||||||
|
long cutoff = (EnvironmentEdgeManager.currentTime() + this.operationTimeout) * 1000L;
|
||||||
|
waitUntilDone(cutoff);
|
||||||
|
} else {
|
||||||
|
waitUntilDone(Long.MAX_VALUE);
|
||||||
|
}
|
||||||
} catch (InterruptedException iex) {
|
} catch (InterruptedException iex) {
|
||||||
throw new InterruptedIOException(iex.getMessage());
|
throw new InterruptedIOException(iex.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
|
|
Loading…
Reference in New Issue