fix(runtime): Primary verdict published from host start, cache boot never adopts malformed bytes, strict drain-gate predicate, HostAbortedException passthrough, seed only Up members
Review R1: - M1 (#609): DriverHostActor.StopChild releases the instance's resilience state before evicting the hub. - m2 (#597): DriverHostActor publishes ShouldServiceAsPrimary() to IDriverPrimaryRoleSource at start and on cluster membership changes (deduped), so the native-ack gate denies in a pair's boot window. - m4 (#601): ApplyCachedArtifact returns false on empty/malformed bytes; the cached revision is not adopted, Direct mode goes Stale (no RUNNING FROM CACHE), FetchAndCache lands Steady-with-no-revision and a re-dispatch of the same revision really applies. - m3 (#603): LocalDbReplicationPolicy splits into CapturesChanges (PeerAddress||ApiKey, registration) and SharesRowsWithPeer (ApiKey && (PeerAddress||SyncListenPort>0), alarm drain gate). - m5 (#618): Program.cs catch-all filters HostAbortedException (design-time tooling). - m6 (Cluster-002): ClusterRoleInfo seeds only Up/WeaklyUp members. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -97,4 +97,30 @@ public sealed class ClusterRoleInfoMemberEventTests
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Review R1 m6: the initial seed lists only Up / WeaklyUp members. A member already departing at seed
|
||||
/// time never fires a later Left/Exited/Downed event, so seeding it would list it until MemberRemoved.
|
||||
/// The Up and WeaklyUp members are the positive control (the seed does list members).
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Initial_seed_lists_only_up_and_weakly_up_members()
|
||||
{
|
||||
await WithInfoAsync(info =>
|
||||
{
|
||||
var members = ImmutableSortedSet.Create<Member>(
|
||||
NewMember(21001, MemberStatus.Up),
|
||||
NewMember(21002, MemberStatus.WeaklyUp),
|
||||
NewMember(21003, MemberStatus.Leaving),
|
||||
NewMember(21004, MemberStatus.Exiting),
|
||||
NewMember(21005, MemberStatus.Down),
|
||||
NewMember(21006, MemberStatus.Joining));
|
||||
|
||||
info.SeedFrom(new ClusterEvent.CurrentClusterState().Copy(members: members));
|
||||
|
||||
info.MembersWithRole("driver").Select(n => n.Value).OrderBy(v => v).ShouldBe(
|
||||
["127.0.0.1:21001", "127.0.0.1:21002"]);
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user