[ https://issues.apache.org/jira/browse/PHOENIX-4130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16336596#comment-16336596 ]
James Taylor commented on PHOENIX-4130: --------------------------------------- This is tricky. We'll only have our client-side retry logic if the write to the data table succeeded, but the write to the index table failed, right? In that case, if subsequent updates to the same row successfully get written while we're retrying our previous update on the client, those new updates would see this data table write and do the index maintenance as if the corresponding index row is there (i.e. it'd place a delete for the index row that hasn't yet been written). I think we need to set REPLAY_WRITES to true in this case *and* we need to communicate back through the exception what the timestamp of the failed batch is (so that we use the same timestamp for the index writes on retry). It'll be somewhat tricky to write a test for these scenarios. > Avoid server retries for mutable indexes > ---------------------------------------- > > Key: PHOENIX-4130 > URL: https://issues.apache.org/jira/browse/PHOENIX-4130 > Project: Phoenix > Issue Type: Improvement > Reporter: Lars Hofhansl > Assignee: Vincent Poon > Priority: Major > Fix For: 4.14.0 > > Attachments: PHOENIX-4130.v1.master.patch, > PHOENIX-4130.v2.master.patch > > > Had some discussions with [~jamestaylor], [~samarthjain], and [~vincentpoon], > during which I suggested that we can possibly eliminate retry loops happening > at the server that cause the handler threads to be stuck potentially for > quite a while (at least multiple seconds to ride over common scenarios like > splits). > Instead we can do the retries at the Phoenix client that. > So: > # The index updates are not retried on the server. (retries = 0) > # A failed index update would set the failed index timestamp but leave the > index enabled. > # Now the handler thread is done, it throws an appropriate exception back to > the client. > # The Phoenix client can now retry. When those retries fail the index is > disabled (if the policy dictates that) and throw the exception back to its > caller. > So no more waiting is needed on the server, handler threads are freed > immediately. -- This message was sent by Atlassian JIRA (v7.6.3#76005)