phoenix-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vincent Poon (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-5079) PhoenixIndexMetaData.isIndexRebuild gives wrong results in Partial Index Rebuilding
Date Wed, 02 Jan 2019 22:37:00 GMT

    [ https://issues.apache.org/jira/browse/PHOENIX-5079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16732481#comment-16732481
] 

Vincent Poon commented on PHOENIX-5079:
---------------------------------------

[~mihir6692] I see the problem now.  We only set the attribute REPLAY_WRITE on the original
data table mutations, not the associated index updates.  In order to make it so the FailurePolicy
can know whether it's doing a rebuild, we would need to set the attribute on the index mutations
as well.  That could be done in IndexBuildManager#getIndexUpdate(), where we are looping
through each data table mutation and generating its associated index update.  If it's a rebuild,
we could set the attribute on the index update there.

> PhoenixIndexMetaData.isIndexRebuild gives wrong results in Partial Index Rebuilding
> -----------------------------------------------------------------------------------
>
>                 Key: PHOENIX-5079
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5079
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.14.1
>            Reporter: Monani Mihir
>            Priority: Minor
>
> During Partial Rebuild, If rebuilder get index failure (because of region move/split
etc), it will call PhoenixIndexFailurePolicy.handleFailure . Here it checks if mutations are
part of Index Rebuild or not . 
> {code:java}
> if (!throwing) {
>                 SQLException sqlException =
>                         new SQLExceptionInfo.Builder(SQLExceptionCode.INDEX_WRITE_FAILURE)
>                                 .setRootCause(cause).setMessage(cause.getLocalizedMessage()).build()
>                                 .buildException();
>                 IOException ioException = ServerUtil.wrapInDoNotRetryIOException(null,
sqlException, timestamp);
>             Mutation m = attempted.entries().iterator().next().getValue();
>             boolean isIndexRebuild = PhoenixIndexMetaData.isIndexRebuild(m.getAttributesMap());
>             // Always throw if rebuilding index since the rebuilder needs to know
if it was successful
>             if (throwIndexWriteFailure || isIndexRebuild) {
>             throw ioException;
>             } else {
>                     LOG.warn("Swallowing index write failure", ioException);
>             }
>             }
> {code}
> Here isIndexRebuild becomes false even though we have set attribute for REPLY_WRITE
to 
> REPLAY_ONLY_INDEX_WRITES  in UngroupedAggregateRegionObserver.rebuildIndices 
> {code:java}
> ...
> put.setAttribute(REPLAY_WRITES, REPLAY_ONLY_INDEX_WRITES);
> ...{code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message