Repository navigation
P0: prevent consecutive BCUGE command stalls with single-flight and uncertain-timeout quarantine - #614
Draft
masarray wants to merge 20 commits into
Conversation
…ritative quarantine
… result publication
… and ctlModel Write
…ardown fencing regressions
…lent operator cancel
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
P0 — BCUGE consecutive IEC 61850 control stall / association-wide recovery
Source: operator's 2026-10-16 18:49 diagnostic from ARSAS
29eb0d2d9ce38286feb433f5aa9411d5263d91f6/ pinned engine036e2c00d83a0815b6160147b14ea05975057965.Reproduced factual log sequence
Control execution requestedlogged, no terminal result by diagnostic 18:49:16.session.ControlCommandActive > 0; native client serializes controls behind one gate while per-object UI permitted queue buildup.Consumer fixes
WaitAsynctimeout is NOT equated to native completion; observe and log late task errors/results without publishing process status.UNKNOWN wire outcome, instruct operator to confirm actual IED status and reconnect before retrying.Limits / acceptance
This fixes the demonstrated consumer queue amplification and missing overall timeout, not the ultimate native timeout root cause. A native operation ignoring cancellation can still retain the old association; do not force-release it and accidentally send a second command on the same socket. Follow-up may require ARIEC engine diagnostics of MMS receive pump / cancelled native control cleanup. No engine repin, MMS Write semantic change, or new value cache.
Physical acceptance: first successful command, subsequent different-CSWI command, fake nonresponding MMS endpoint, UI responsiveness, actual control wire outcomes and reconnect semantics. Keep draft and unmerged until CI and bench evidence.
Continuation: P0 native lifetime / reconnect isolation (2026-10-17)
Additional commits continue directly on this existing draft PR (no engine repin, no main merge).
ControlSessionIdentityprevents an old native completion from clearing a different session's target ownership.Verification limits
Iec61850ControlObjectSession.DisposeAsyncgate wait andBestEffortCancelAsync(CancellationToken.None)cleanup; these are static review findings, not proof that either caused the incident.