[ https://issues.apache.org/jira/browse/PHOENIX-3576?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ChiaPing Tsai updated PHOENIX-3576: ----------------------------------- Attachment: PHOENIX-3576.v0.patch hi [~rajeshbabu] The hbase-1.3 has been released. This issue may be resolved by the other which updates the local index through the HBASE-15600. But this issue still impacts on the older hbase. Does the phoenix continue to support the older hbase ? If yes, we can implement the non-parallel IndexCommitter instead of ParallelWriterIndexCommitter. This solution is slower, but it can deal with the lock problem. I have attached a draft. Would you please take a look if you have time? Thanks. > The local index updates will be blocked when the region is preparing to split > ----------------------------------------------------------------------------- > > 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 > Attachments: hbase-root-regionserver-node06.ncku.edu.tw.log, > PHOENIX-3576.v0.patch > > > 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)