You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "ChiaPing Tsai (JIRA)" <ji...@apache.org> on 2017/01/11 10:54:58 UTC

[jira] [Updated] (PHOENIX-3576) ParallelWriterIndexCommitter should fail fast when writing the local index to the closing table

     [ https://issues.apache.org/jira/browse/PHOENIX-3576?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

ChiaPing Tsai updated PHOENIX-3576:
-----------------------------------
    Attachment: hbase-root-regionserver-node06.ncku.edu.tw.log

This issue requires the support of HBASE-15600..
Or we need to pre-split the table for avoiding the splitting when updating the local index.

> 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
>         Attachments: hbase-root-regionserver-node06.ncku.edu.tw.log
>
>
> 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)