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

Jialiang Cai reassigned AMBARI-26640:
-------------------------------------

    Assignee: Jialiang Cai

> Prevent auto-recovery from blocking cluster start operations
> ------------------------------------------------------------
>
>                 Key: AMBARI-26640
>                 URL: https://issues.apache.org/jira/browse/AMBARI-26640
>             Project: Ambari
>          Issue Type: Bug
>            Reporter: Jialiang Cai
>            Assignee: Jialiang Cai
>            Priority: Major
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> h2. Problem
> Ambari Agent auto-recovery commands use the same {{ActionQueue}} as 
> server-issued execution commands, but recovery work is generated locally and 
> is not represented in the server request graph or shown in the UI. A queued 
> or running recovery command can therefore occupy the Agent while an operator 
> starts the cluster or uses {{Start All Services}}. The page appears stuck 
> even though the server operation is waiting behind hidden Agent work.
> Auto-recovery currently decides whether to start or restart a component from 
> only that component local desired and current state. It does not honor the 
> cluster {{RoleCommandOrder}} used by normal cluster start requests. After a 
> server restart, Agent reconnect, heartbeat loss, or concurrent component 
> transition, cached state can also be stale or delivered out of order. This 
> can start downstream components before their dependencies are ready, or 
> repeatedly schedule recovery while an operator is trying to control the 
> cluster.
> h2. Reproduction Scenario
> # Enable auto-recovery for one or more components.
> # Stop or fail a component so the Agent queues or starts a local recovery 
> command.
> # From Ambari, run {{Start All Services}} or another server-issued command on 
> the same host.
> # Observe that the visible request waits while the local recovery task is not 
> visible in the request graph.
> # Restart Ambari Server or reconnect an Agent while component states are 
> changing. The Agent can make recovery decisions from a snapshot that does not 
> identify its server lifecycle, version, completeness, or reporting Agent 
> session.
> h2. Root Causes
> * Server-issued execution commands do not preempt queued or active 
> auto-recovery commands. There is also a dequeue-to-active race where recovery 
> can start immediately before a server command reaches the queue.
> * Recovery configuration contains enabled components and desired state, but 
> no dependency graph or runtime dependency state.
> * The Agent cannot distinguish a complete current-session component snapshot 
> from cached status left by an earlier connection.
> * Recovery topology updates have no server epoch or monotonic version, so 
> delayed updates can overwrite newer state.
> * Status acknowledgements and cached reports can cross a reconnect boundary 
> unless they are associated with a snapshot generation.
> h2. Proposed Behavior
> * A server-issued {{EXECUTION_COMMAND}} must take priority over Agent 
> auto-recovery. Queued recovery commands should be removed and active recovery 
> commands should be cancelled before the server command executes. Recovery 
> must also yield when a server command wins the dequeue-to-active race.
> * Ambari Server should derive recovery dependencies from the same transitive 
> {{RoleCommandOrder}} used by the stage planner. Each dependency must be 
> expanded to real component instances and include service, component, host, 
> current state, desired state, required state, and freshness.
> * The topology sent to Agents must include a server epoch, a monotonic 
> version, and a completeness flag. Cached server topology must not regress to 
> an older version in the same epoch.
> * Component state freshness must be scoped to the active Agent session. 
> Registration invalidates the previous snapshot, a complete component-status 
> scan makes the new session fresh, heartbeat loss invalidates it again, and 
> reports from superseded sessions are ignored.
> * Agent {{START}} and {{RESTART}} recovery must remain blocked until the 
> topology is complete and every dependency is fresh and satisfies its required 
> state. A {{STARTED}} component also satisfies an {{INSTALLED}} dependency. 
> Non-start recovery behavior should remain compatible with the existing 
> recovery mode.
> * Agent reconnect must clear the old reported-status cache before exposing 
> the new registered connection. Acknowledgements from an earlier snapshot 
> generation must not complete or repopulate the new snapshot.
> h2. Acceptance Criteria
> # {{Start All Services}} and other server-issued operations are not blocked 
> behind queued or running auto-recovery work on an Agent.
> # Auto-recovery {{START}} and {{RESTART}} follow transitive cluster startup 
> ordering across hosts and services.
> # Recovery does not run from incomplete, stale, superseded-session, or 
> out-of-order topology data.
> # Dependency state changes are republished and eventually unblock downstream 
> recovery after upstream components become ready.
> # Server restart, Agent reconnect, and heartbeat loss conservatively block 
> recovery until a fresh complete status snapshot is available.
> # Existing Agents ignore the additive topology fields, and updated Agents 
> retain compatibility with recovery configuration from an older server.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to