fix(runtime): a stopping driver child announces comms loss so restart/respawn latches its nodes Bad
This commit is contained in:
@@ -1420,6 +1420,21 @@ public sealed class DriverInstanceActor : ReceiveActor, IWithTimers
|
||||
/// <inheritdoc />
|
||||
protected override void PostStop()
|
||||
{
|
||||
// Archreview 03/S15 — announce comms loss on the way out. Every OTHER route into Reconnecting
|
||||
// (watchdog trip, failed initial connect, Force Reconnect) announces it from the Reconnecting
|
||||
// entry; stopping did not, so an operator's Restart and a supervision respawn tore this child down
|
||||
// silently and its value nodes went on serving their last value at Good across the gap. The fresh
|
||||
// child's re-subscribe + initial push (03/S16) is what clears them again; on a deploy that REMOVES
|
||||
// the driver the host has already rebuilt its ref index without it, so the Tell finds nothing.
|
||||
//
|
||||
// Gated on having actually reached Connected: a child that never connected leaves its nodes at
|
||||
// BadWaitingForInitialData, which says something more precise than "communication lost", and
|
||||
// overwriting it would claim an outage that never happened.
|
||||
if (_connectedSinceUtc != default)
|
||||
{
|
||||
Context.Parent.Tell(new ConnectivityChanged(_driverInstanceId, Connected: false));
|
||||
}
|
||||
|
||||
DetachSubscription();
|
||||
// MUST happen: the IDriver instance can outlive this actor (the host respawns a child around the
|
||||
// same driver object), so a missing unsubscribe accumulates a handler per respawn holding a dead Self.
|
||||
|
||||
Reference in New Issue
Block a user