Fix second-pass review findings: subscription leak on rebuild, metrics accuracy, and MxAccess startup recovery

- Preserve and replay subscription ref counts across address space rebuilds to prevent MXAccess subscription leaks
- Mark read timeouts and write failures as unsuccessful in PerformanceMetrics for accurate health reporting
- Add deferred MxAccess reconnect path when initial connection fails at startup
- Update code review document with verified completions and new findings
- Add covering tests for all fixes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph Doherty
2026-03-25 09:41:12 -04:00
parent 71254e005e
commit 09ed15bdda
12 changed files with 307 additions and 51 deletions

View File

@@ -29,6 +29,7 @@ namespace ZB.MOM.WW.LmxOpcUa.Tests.Helpers
public int UnregisterCallCount { get; private set; }
public bool ShouldFailRegister { get; set; }
public bool ShouldFailWrite { get; set; }
public bool SkipWriteCompleteCallback { get; set; }
public int WriteCompleteStatus { get; set; } = 0; // 0 = success
public int Register(string clientName)
@@ -87,7 +88,8 @@ namespace ZB.MOM.WW.LmxOpcUa.Tests.Helpers
status[0].success = 0;
status[0].detail = (short)WriteCompleteStatus;
}
OnWriteComplete?.Invoke(_connectionHandle, itemHandle, ref status);
if (!SkipWriteCompleteCallback)
OnWriteComplete?.Invoke(_connectionHandle, itemHandle, ref status);
}
/// <summary>