fix: apply BecomeLeader() to all cluster test fixtures after stepdown
Extended the BecomeLeader() fix to JetStreamClusterFixture, ClusterFailoverFixture, and LeaderFailoverParityFixture. All three fixtures now auto-simulate leader election after stepdown, matching the MetaControllerFixture fix from the previous commit.
This commit is contained in:
@@ -519,7 +519,14 @@ internal sealed class ClusterFailoverFixture : IAsyncDisposable
|
|||||||
=> _consumerManager.FetchAsync(stream, durableName, batch, _streamManager, default).AsTask();
|
=> _consumerManager.FetchAsync(stream, durableName, batch, _streamManager, default).AsTask();
|
||||||
|
|
||||||
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
||||||
=> Task.FromResult(_router.Route(subject, Encoding.UTF8.GetBytes(payload)));
|
{
|
||||||
|
var response = _router.Route(subject, Encoding.UTF8.GetBytes(payload));
|
||||||
|
|
||||||
|
if (subject.Equals(JetStreamApiSubjects.MetaLeaderStepdown, StringComparison.Ordinal) && response.Success)
|
||||||
|
_metaGroup.BecomeLeader();
|
||||||
|
|
||||||
|
return Task.FromResult(response);
|
||||||
|
}
|
||||||
|
|
||||||
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,7 +223,17 @@ internal sealed class JetStreamClusterFixture : IAsyncDisposable
|
|||||||
/// Go ref: nc.Request() in cluster test helpers.
|
/// Go ref: nc.Request() in cluster test helpers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
||||||
=> Task.FromResult(_router.Route(subject, Encoding.UTF8.GetBytes(payload)));
|
{
|
||||||
|
var response = _router.Route(subject, Encoding.UTF8.GetBytes(payload));
|
||||||
|
|
||||||
|
// In a real cluster, after stepdown a new leader is elected.
|
||||||
|
// Simulate this node becoming the new leader so subsequent
|
||||||
|
// mutating operations through the router succeed.
|
||||||
|
if (subject.Equals(JetStreamApiSubjects.MetaLeaderStepdown, StringComparison.Ordinal) && response.Success)
|
||||||
|
_metaGroup.BecomeLeader();
|
||||||
|
|
||||||
|
return Task.FromResult(response);
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
// Leader operations
|
// Leader operations
|
||||||
@@ -241,7 +251,13 @@ internal sealed class JetStreamClusterFixture : IAsyncDisposable
|
|||||||
/// Go ref: c.leader().Shutdown() in jetstream_helpers_test.go.
|
/// Go ref: c.leader().Shutdown() in jetstream_helpers_test.go.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void StepDownMetaLeader()
|
public void StepDownMetaLeader()
|
||||||
=> _metaGroup.StepDown();
|
{
|
||||||
|
_metaGroup.StepDown();
|
||||||
|
// In a real cluster, a new leader is elected after stepdown.
|
||||||
|
// Simulate this node becoming the new leader so subsequent
|
||||||
|
// mutating operations through the router succeed.
|
||||||
|
_metaGroup.BecomeLeader();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the current meta-group state snapshot.
|
/// Returns the current meta-group state snapshot.
|
||||||
|
|||||||
@@ -215,7 +215,14 @@ internal sealed class LeaderFailoverFixture : IAsyncDisposable
|
|||||||
public MetaGroupState? GetMetaState() => _streamManager.GetMetaState();
|
public MetaGroupState? GetMetaState() => _streamManager.GetMetaState();
|
||||||
|
|
||||||
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
public Task<JetStreamApiResponse> RequestAsync(string subject, string payload)
|
||||||
=> Task.FromResult(_router.Route(subject, Encoding.UTF8.GetBytes(payload)));
|
{
|
||||||
|
var response = _router.Route(subject, Encoding.UTF8.GetBytes(payload));
|
||||||
|
|
||||||
|
if (subject.Equals(JetStreamApiSubjects.MetaLeaderStepdown, StringComparison.Ordinal) && response.Success)
|
||||||
|
_metaGroup.BecomeLeader();
|
||||||
|
|
||||||
|
return Task.FromResult(response);
|
||||||
|
}
|
||||||
|
|
||||||
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user