[
https://issues.apache.org/jira/browse/PHOENIX-5266?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16835462#comment-16835462
]
Mihir Monani commented on PHOENIX-5266:
---------------------------------------
I have updated new patch with test case changes suggested by
[[email protected]] Also IndexRebuildTaskIT passes for me as well as all other
failed test.
As suggested by [~abhishek.chouhan] [~vincentpoon] I have made changes into
how we handle mutationBatchList. With current patch, it will remove batch which
are already applied via htable.batch. So whenever failure happens, it would
only happen in first batch in mutationBatchList and we can accommodate
optimization for REPLAY_ONLY_INDEX_WRITES.
I have also tested this patch with batchSize=1000 too in test case and it
passes successfully.
Once i get QA run for 4.x-HBase-1.3 branch i will upload patch for master
branch too.
> 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-4.x-HBase-1.3.02.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)