[ 
https://issues.apache.org/jira/browse/PHOENIX-8027?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lokesh Khurana resolved PHOENIX-8027.
-------------------------------------
    Resolution: Fixed

> Allow consistent failover to be initiated only from ACTIVE_IN_SYNC
> ------------------------------------------------------------------
>
>                 Key: PHOENIX-8027
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-8027
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: Lokesh Khurana
>            Assignee: Lokesh Khurana
>            Priority: Major
>
> Today initiate-failover is accepted from ACTIVE_NOT_IN_SYNC 
> (store-and-forward) and moves the
> group to ACTIVE_NOT_IN_SYNC_TO_STANDBY while the forwarder drains the local 
> backlog to the
> standby. In that window a single peer HDFS write failure is unrecoverable:
> 1. SyncAndForwardModeImpl.onFailure calls transitionToStoreAndForward, which 
> asks the HAGroupStore to move the group to ACTIVE_NOT_IN_SYNC.
> 2. ACTIVE_NOT_IN_SYNC is not an allowed transition from 
> ACTIVE_NOT_IN_SYNC_TO_STANDBY, so the update throws 
> InvalidClusterRoleTransitionException.
> 3. The mode never changes, the local store-and-forward write is never 
> attempted, and the writer goes fatal ("Both SYNC and SAF replication writes 
> failed").
> 4. ReplicationLogGroup.abort() aborts the RegionServer. The RSs that open its 
> regions replay the recovered edits in IndexRegionObserver.preWALRestore and 
> abort the same way.
> abort-failover does not help: it only applies to a standby in 
> STANDBY_TO_ACTIVE, and the
> standby never reaches that state.
> Testing found (FAILOVER policy, active cluster with 6 RegionServers, ~3 
> rows/s client load):
> - Repro: set the active to ACTIVE_NOT_IN_SYNC, then to 
> ACTIVE_NOT_IN_SYNC_TO_STANDBY, then put a 1-byte space quota on the peer's 
> /phoenixHA/<group>/in.
> - The first RS aborted 0.13 s after the failed peer write. The other 5 
> aborted 6 s later on
>   RS_OPEN_REGION threads while opening its regions.
> - 18 RS restarts in about 2 min. The group's writes stopped for 92 s. Every 
> region of every table on those RSs was reassigned, not only the HA group's. 
> No data was lost.
> - With a healthy peer, the same steps drained in about 100 s and completed 
> the failover.
> Proposal: allow initiate-failover only from ACTIVE_IN_SYNC, and reject 
> ACTIVE_NOT_IN_SYNC with an error telling the operator to wait for 
> ACTIVE_IN_SYNC, or to fix the peer first if the group is stuck. No capability 
> is lost: the ANIS path already had to drain to ACTIVE_IN_SYNC_TO_STANDBY 
> before cutover, so the operator now just waits for the drain before starting 
> the failover. Keep the ACTIVE_NOT_IN_SYNC_TO_STANDBY state and its 
> transitions so groups already in that state, and mixed-version clusters, keep 
> working.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to