| Previous | Next |
| ERROR_RUNLEVEL_SWITCH_TIMEOUT | ERROR_RUNLEVEL_SWITCH_IN_PROGRESS |
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT
Run-level switch agent did not respond
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT is Windows system result 15403 (0x00003C2B). The controller lost timely confirmation from the agent responsible for part of the transition.
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT is a coordination failure, not proof that the agent performed no work. The agent can receive and apply a step but fail before acknowledging it, which makes reconciliation mandatory.
Where this value belongs
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTcan be observed when a separate process or node executes transition steps on behalf of the controller.ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTcan be observed when an agent communicates through RPC, IPC, or a service channel.ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTcan be observed when the controller waits for prepare, commit, rollback, or status acknowledgement.
The central question is whether the request reached the agent and which phase it completed. Resending without that answer can duplicate a non-idempotent transition.
Common interpretation mistakes
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTis mishandled when timeout is treated as a negative acknowledgement.ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTis mishandled when the same request receives a new ID on retry.ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTis mishandled when agent and controller clocks or deadlines are not correlated.ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUTis mishandled when agent restart erases the last committed transition state.
Diagnostic sequence
- Capture agent identity, request ID, phase, and deadline.
- Verify transport delivery and agent receive time.
- Inspect the agent journal for prepare or commit completion.
- Check process health, thread stacks, and communication queues.
- Query the agent using the original transition ID after recovery.
- Resume, compensate, or retry only from the reconciled phase.
Evidence worth keeping
- For
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT, preserve agent and controller identities. - For
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT, preserve stable transition and request IDs. - For
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT, preserve send, receive, apply, and acknowledgement timestamps. - For
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT, preserve agent journal or durable phase record. - For
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT, preserve transport and process-health diagnostics.
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT requires end-to-end correlation because controller logs alone cannot distinguish a lost request from a lost acknowledgement.
Correct handling and recovery
Restore agent communication or responsiveness, then query the original transition state and continue from a known phase.
Use the same idempotency key when the protocol permits retry. Never start a second independent switch while the first agent request may still be active.
Difference from nearby values
ERROR_RUNLEVEL_SWITCH_TIMEOUT identifies services that did not stop or restart in time. Code 15403 identifies the agent that failed to respond to the orchestrator.
Practical scenario
An agent commits a service change and deadlocks before replying. The controller receives 15403, restarts the agent, queries the original transition ID, and learns that commit completed instead of executing it twice.
Implementation guidance
Agents should journal phase transitions before acknowledgement and expose a query-by-ID operation. Controllers should separate communication timeout from negative execution result.
For code 15403, record runlevel_agent, runlevel_agent_request_id, runlevel_agent_phase, runlevel_agent_last_seen, and runlevel_agent_reconcile_result.
References
- Microsoft: System Error Codes 12000–15999 — official Microsoft documentation relevant to
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT. - Microsoft: sc.exe config — official Microsoft documentation relevant to
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT. - Microsoft: QueryServiceStatusEx — official Microsoft documentation relevant to
ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT.
Looking for a different code? Search another status or error code.
