Repository navigation
P0 follow-up: retire unresolved MMS control sessions without blocking reconnect - #615
Draft
masarray wants to merge 20 commits into
Conversation
… or leaking authority
…mmand was not sent
…te legacy ownership regressions
…late command stages by attempt and association
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 Command continuation (stacked on #614)
Addresses a verified consumer lifecycle hazard:
StopDeviceAsynccould awaitNativeIec61850Client.DisposeAsyncindefinitely while an unresolved native control held the MMS I/O gate. The process-widedeviceId|controlReferencemap also allowed a late release from an old association to interfere with a new connection.Changes
Iec61850ControlSessionLeasewith sticky quarantine, retirement, and an actual-native-release drain task.Important limitations / safety
Validation
Pending fresh GitHub CI on this PR and physical acceptance. Preserve ARIEC pin
036e2c00d83a0815b6160147b14ea05975057965and ArdIrec pin7dbc7149db668126a493ce338264363a6ec5ec00. No merge to main.Additional fail-closed evidence and engine follow-up
CompletionState=WireStateUnknown(or explicit timeout state) also quarantines the association before release; no subsequent Operate is admitted.Command outcome UNKNOWNfromCommand not sentfor both native-unknown and outer-deadline timeout paths.BestEffortCancelAsync(CancellationToken.None)was identified by source audit; it is not yet proven to be the field incident's root cause. No engine repin.Command snapshot / diagnostic hardening
SignalDefinitionsnapshot; a late ARIEC task cannot write its mutable control fields into the WPF-owned model after old-session retirement.CancelledandAssociationLostcontrol outcomes are conservatively quarantined alongsideWireStateUnknownandTimedOut.attemptId+associationId, admission UTC, native task creation (NOT evidence of an actual wire send), timeout, terminal result and late-native observation.No physical wire-send or invoke ID is claimed without ARIEC evidence.
Verified CI evidence (HEAD
b22f0f8e92e76f7d602b7955321c165cf626499e)