3456756cd1
Review fix round 1 for lane F: - The ScanState probe watcher is seeded at InitializeAsync from a platform-only DiscoverHierarchy query (IGalaxyPlatformSource / GatewayGalaxyPlatformSource over the owned repository client) and re-seeded on every deploy-watcher rediscovery. The runtime never calls DiscoverAsync on a live driver, so per-platform host status was unreachable in production. A failed fetch logs a Warning and never fails init; re-seeds coalesce so a deploy during an in-flight pass still gets a pass that starts after it. - EnsureEventPumpStarted refuses while the runtime is stopping, BEFORE reusing the live pump (that pump belongs to the dying subscriber), and the production rebuild disposes any stale pump before wiring the new subscriber. - TeardownRuntimeAsync closes the MX session under the caller's token linked with a 5 s SessionCloseDeadline, so a blackholed gateway cannot hold DriverInstanceActor.PostStop for 30 s. - A runtime generation counter, bumped by every teardown, is re-checked before each Rebind in ResubscribeAllAsync, so a replay-gap re-snapshot that straddles a teardown cannot resurrect handles into the cleared registry. Refs #735 Claude-Session: https://claude.ai/code/session_01Ub9hGmYLQvn9XETzw7CMsT
19 lines
1.1 KiB
C#
19 lines
1.1 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Browse;
|
|
|
|
/// <summary>
|
|
/// Driver-side seam for the set of Galaxy platform / engine objects whose <c>ScanState</c>
|
|
/// the <c>PerPlatformProbeWatcher</c> advises. Production wraps the gateway's
|
|
/// <c>DiscoverHierarchy</c> RPC filtered to <c>$WinPlatform</c> / <c>$AppEngine</c> with no
|
|
/// attributes (<see cref="GatewayGalaxyPlatformSource"/>); tests substitute a canned list.
|
|
/// The driver seeds the watcher from this at <c>InitializeAsync</c> and re-seeds on every
|
|
/// deploy-watcher rediscovery — the runtime never calls <c>DiscoverAsync</c> on a live driver,
|
|
/// so without this seed the probe watcher never had a platform set in production.
|
|
/// </summary>
|
|
public interface IGalaxyPlatformSource
|
|
{
|
|
/// <summary>The <c>tag_name</c> of every deployed <c>$WinPlatform</c> / <c>$AppEngine</c> object.</summary>
|
|
/// <param name="cancellationToken">Cancellation token for the query.</param>
|
|
/// <returns>Platform tag names; empty when the galaxy has none.</returns>
|
|
Task<IReadOnlyList<string>> GetPlatformTagNamesAsync(CancellationToken cancellationToken);
|
|
}
|