refactor(runtime): delete the dead in-place ApplyDelta seam; config change = respawn only (#665)
Since #516 a DriverConfig change is stop + respawn, so DriverSpawnPlan.ToApplyDelta was always empty and the in-place path had no producer. #663 and #664 were both latent bugs in it. This deletes it: - host: ApplyChildDelta, _pendingDelta, HandleApplyResult and HandleDeltaApplied - plan: DriverSpawnPlan.ToApplyDelta - actor: the ApplyDelta, ApplyResult and DeltaApplied messages, the Connected reinit handler and the mid-connect AdoptConfigDuringInit - tests: the actor tests that drove the seam IDriver.ReinitializeAsync and each driver's implementation and unit tests stay. Comments and docs that cited AdoptConfigDuringInit as the reason a driver must release prior state at init now cite the IDriver contract and overlapping retries, which still apply. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
+5
-4
@@ -31,7 +31,7 @@ public sealed class CalculationDependencyFlowTests : RuntimeActorTestBase
|
||||
return new RawTagEntry(rawPath, json, WriteIdempotent: false);
|
||||
}
|
||||
|
||||
/// <summary>Build the merged DriverConfig JSON the ApplyDelta path re-binds from (mirrors the deploy
|
||||
/// <summary>Build the merged DriverConfig JSON an in-place re-bind reads (mirrors the deploy
|
||||
/// artifact folding the driver's RawTags into DriverInstanceSpec.DriverConfig).</summary>
|
||||
private static string ConfigJson(params RawTagEntry[] tags) =>
|
||||
System.Text.Json.JsonSerializer.Serialize(new { rawTags = tags });
|
||||
@@ -130,7 +130,7 @@ public sealed class CalculationDependencyFlowTests : RuntimeActorTestBase
|
||||
published.ShouldContain(e => e.FullReference == "calc/remove" && Equals(e.Snapshot.Value, 7.0));
|
||||
}, PresenceBudget, TimeSpan.FromMilliseconds(100));
|
||||
|
||||
// ---- REDEPLOY (in-place ApplyDelta) ----
|
||||
// ---- IN-PLACE RE-BIND (driver ReinitializeAsync) ----
|
||||
// New authored set: "keep" script EDITED to src/a*1000; "add" is a NEW tag reading a NEW dep src/b;
|
||||
// "remove" is dropped entirely.
|
||||
var newConfig = ConfigJson(
|
||||
@@ -141,8 +141,9 @@ public sealed class CalculationDependencyFlowTests : RuntimeActorTestBase
|
||||
// The rebuilt dependency-ref set reflects the NEW authored tags (src/a from keep, src/b from add).
|
||||
driver.DependencyRefs.OrderBy(r => r).ShouldBe(new[] { "src/a", "src/b" });
|
||||
|
||||
// Part 2 sequencing: the host re-registers the adapter AFTER reinit (DeltaApplied → HandleDeltaApplied).
|
||||
// Mirror that here — re-register so the adapter adopts the NEW ref set (incl. the brand-new src/b).
|
||||
// The adapter re-reads the driver's refs only when told to; re-register AFTER the reinit so it adopts the
|
||||
// NEW ref set (incl. the brand-new src/b). (The runtime respawns on a config change, #665, so a fresh
|
||||
// adapter registers the new set in PreStart; this exercises the driver + adapter contract directly.)
|
||||
adapter.Tell(new DependencyConsumerMuxAdapter.ReRegister());
|
||||
|
||||
// Leg 2 — after redeploy: the NEW dep src/b flows + the NEW tag computes; the EDITED script serves the
|
||||
|
||||
Reference in New Issue
Block a user