[ https://issues.apache.org/jira/browse/PHOENIX-4130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16341385#comment-16341385 ]
ASF GitHub Bot commented on PHOENIX-4130: ----------------------------------------- Github user JamesRTaylor commented on a diff in the pull request: https://github.com/apache/phoenix/pull/290#discussion_r164180172 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java --- @@ -379,6 +388,12 @@ public void run() { } else if (indexState == PIndexState.PENDING_ACTIVE) { IndexUtil.updateIndexState(conn, indexTableFullName, PIndexState.ACTIVE, null); continue; // Must wait until clients start to do index maintenance again + } else if (indexState == PIndexState.PENDING_DISABLE) { + if (elapsedSinceDisable > pendingDisableThreshold) { + // too long in PENDING_DISABLE - client didn't disable the index, so we do it here + IndexUtil.updateIndexState(conn, indexTableFullName, PIndexState.DISABLE, null); --- End diff -- This will put the index into a permanently disabled state requiring manual intervention. I think we should not pass in null for the indexDisableTimestamp here, but pass in the current value instead. That'll cause the index to be partially rebuilt (as long as it's not older that the threshold to permanently disable it). > 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, PHOENIX-4130.v3.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)