ChiaPing Tsai created PHOENIX-3576:
--------------------------------------
Summary: ParallelWriterIndexCommitter should fail fast when
writing the local index to the closing table
Key: PHOENIX-3576
URL: https://issues.apache.org/jira/browse/PHOENIX-3576
Project: Phoenix
Issue Type: Bug
Affects Versions: 4.9.0
Reporter: ChiaPing Tsai
ParallelWriterIndexCommitter uses the AP to update the local index after the
region#batchMutate fails. If the region is splitting, all later updates will
fail (RegionTooBusyException) due to the write lock. The AP will retry the
failed updates until it reaches the retry threshold, so the read lock of region
is released after a long time. The read lock blocks the HRegion#close, so the
region splitting is also blocked.
{noformat}
try {
if (allowLocalUpdates
&& env != null
&& tableReference.getTableName().equals(
env.getRegion().getTableDesc().getNameAsString())) {
try {
throwFailureIfDone();
IndexUtil.writeLocalUpdates(env.getRegion(),
mutations, true);
return null;
} catch (IOException ignord) {
// when it's failed we fall back to the
standard & slow way
if (LOG.isDebugEnabled()) {
LOG.debug("indexRegion.batchMutate failed
and fall back to HTable.batch(). Got error="
+ ignord);
}
}
}
table = factory.getTable(tableReference.get());
throwFailureIfDone();
table.batch(mutations);
} catch (SingleIndexWriteFailureException e) {
throw e;
} catch (IOException e) {
throw new
SingleIndexWriteFailureException(tableReference.toString(), mutations, e);
} catch (InterruptedException e) {
// reset the interrupt status on the thread
Thread.currentThread().interrupt();
throw new
SingleIndexWriteFailureException(tableReference.toString(), mutations, e);
}
finally{
if (table != null) {
table.close();
}
}
return null;
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)