feat: implement jetstream governance runtime parity semantics

This commit is contained in:
Joseph Doherty
2026-02-23 14:54:30 -05:00
parent 0413ff6ae9
commit 148ff9ebb6
4 changed files with 56 additions and 2 deletions

View File

@@ -0,0 +1,25 @@
using NATS.Server.JetStream.Cluster;
namespace NATS.Server.Tests.JetStream;
public class JetStreamMetaGovernanceStrictParityTests
{
[Fact]
public async Task Meta_and_replica_governance_actions_reflect_committed_state_transitions()
{
var meta = new JetStreamMetaGroup(3);
var before = meta.GetState();
await meta.ProposeCreateStreamAsync(new NATS.Server.JetStream.Models.StreamConfig
{
Name = "ORDERS_GOV",
Subjects = ["orders.gov"],
}, default);
meta.StepDown();
var after = meta.GetState();
after.Streams.ShouldContain("ORDERS_GOV");
after.LeaderId.ShouldNotBe(before.LeaderId);
after.LeadershipVersion.ShouldBe(before.LeadershipVersion + 1);
}
}

View File

@@ -0,0 +1,19 @@
using NATS.Server.JetStream.Cluster;
namespace NATS.Server.Tests.JetStream;
public class JetStreamReplicaGovernanceStrictParityTests
{
[Fact]
public async Task Meta_and_replica_governance_actions_reflect_committed_state_transitions()
{
var group = new StreamReplicaGroup("ORDERS_GOV", replicas: 3);
var beforeLeader = group.Leader.Id;
await group.StepDownAsync(default);
group.Leader.Id.ShouldNotBe(beforeLeader);
var index = await group.ProposeAsync("set placement", default);
index.ShouldBeGreaterThan(0);
}
}