[
https://issues.apache.org/jira/browse/PHOENIX-5266?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16835189#comment-16835189
]
Vincent Poon commented on PHOENIX-5266:
---------------------------------------
[~abhishek.chouhan] Looks like we are doing it for the first batch because
given the way the code is right now, that's the only batch we can be sure was
written to the data table. One option is to do what you said, and change the
code so we only set the replay attribute on the batch that failed the index
write. We also only need to continue from the batch that failed, instead of
redoing the entire batchList.
An alternative is to just remove the use of the REPLAY attribute there. It's a
small optimization that probably isn't worth the code complexity and risk to
correctness otherwise.
I'll leave it up to you, [~mihir6692].
> Client can only write on Index Table and skip data table if failure happens
> because of region split/move etc
> ------------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-5266
> URL: https://issues.apache.org/jira/browse/PHOENIX-5266
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.15.0, 4.14.1, 5.1.0, 4.14.2
> Reporter: Mihir Monani
> Assignee: Mihir Monani
> Priority: Blocker
> Fix For: 4.14.2
>
> Attachments: PHOENIX-5266-4.x-HBase-1.3.01.patch, PHOENIX-5266.patch,
> PHOENIX-5266.patch
>
>
> With Phoenix 4.14.1 client, There is a scenario where client would skip data
> table write but do successful index table write. In this case, we should
> treat it as Data loss scenario.
>
> Relevant code path :-
> [https://github.com/apache/phoenix/blob/4.x-HBase-1.3/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java#L994-L1043]
> [https://github.com/apache/phoenix/blob/4.x-HBase-1.3/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java#L1089-L1109]
>
> Here is what happens :-
> * Consider below assumptions for scenario :-
> ** max no row in single batch = 100
> ** max size of batch = 2 MB
> * When client faces SQLException Code 1121, it sets variable
> shouldRetryIndexedMutation=true.
> * In scenarios where client sends batch of 100 rows only as per
> configuration, but batch size is >2 MB, MutationState.java#991 will split
> this 100 row batch into multiple smaller batches which are <2MB.
> ** MutationState.java#991 :-
> [https://github.com/apache/phoenix/blob/4.x-HBase-1.3/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java#L991]
> * Suppose there are 5 batches of 20 rows but client faces 1121
> SQLExceptionCode on 2nd batch , then it will set
> shouldRetryIndexedMutation=true and it will retry all 5 batches again with
> only Index updates. This will results in rows missing from Data table.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)