phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ChiaPing Tsai (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (PHOENIX-3576) The local index updates will be blocked when the region is preparing to split
Date Tue, 17 Jan 2017 14:18:26 GMT

     [ 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)

Mime
View raw message