fix(cluster): enable SBR downing provider — automatic failover was inert for crashes/partitions
This commit is contained in:
@@ -201,6 +201,11 @@ public class AkkaHostedService : IHostedService
|
|||||||
/// <see cref="ClusterOptions.DownIfAlone"/> rather than hard-coded, so the bound
|
/// <see cref="ClusterOptions.DownIfAlone"/> rather than hard-coded, so the bound
|
||||||
/// configuration value is actually consumed.
|
/// configuration value is actually consumed.
|
||||||
///
|
///
|
||||||
|
/// The split-brain-resolver <c>downing-provider-class</c> is installed
|
||||||
|
/// explicitly: Akka defaults to <c>NoDowning</c>, under which the entire
|
||||||
|
/// split-brain-resolver section is inert and singletons never migrate on a hard
|
||||||
|
/// crash or partition. Naming the SBR provider is what activates automatic downing.
|
||||||
|
///
|
||||||
/// Every duration is rendered via <see cref="DurationHocon"/> in
|
/// Every duration is rendered via <see cref="DurationHocon"/> in
|
||||||
/// milliseconds, so sub-second cluster timing values (e.g. a 750ms heartbeat) are
|
/// milliseconds, so sub-second cluster timing values (e.g. a 750ms heartbeat) are
|
||||||
/// preserved exactly instead of being rounded to whole seconds.
|
/// preserved exactly instead of being rounded to whole seconds.
|
||||||
@@ -251,6 +256,7 @@ akka {{
|
|||||||
seed-nodes = [{seedNodesStr}]
|
seed-nodes = [{seedNodesStr}]
|
||||||
roles = [{rolesStr}]
|
roles = [{rolesStr}]
|
||||||
min-nr-of-members = {clusterOptions.MinNrOfMembers}
|
min-nr-of-members = {clusterOptions.MinNrOfMembers}
|
||||||
|
downing-provider-class = ""Akka.Cluster.SBR.SplitBrainResolverProvider, Akka.Cluster""
|
||||||
split-brain-resolver {{
|
split-brain-resolver {{
|
||||||
active-strategy = {QuoteHocon(clusterOptions.SplitBrainResolverStrategy)}
|
active-strategy = {QuoteHocon(clusterOptions.SplitBrainResolverStrategy)}
|
||||||
stable-after = {DurationHocon(clusterOptions.StableAfter)}
|
stable-after = {DurationHocon(clusterOptions.StableAfter)}
|
||||||
|
|||||||
@@ -160,4 +160,22 @@ public class HoconBuilderTests
|
|||||||
TimeSpan.FromMilliseconds(7500),
|
TimeSpan.FromMilliseconds(7500),
|
||||||
config.GetTimeSpan("akka.remote.transport-failure-detector.acceptable-heartbeat-pause"));
|
config.GetTimeSpan("akka.remote.transport-failure-detector.acceptable-heartbeat-pause"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHocon_EnablesSplitBrainResolverDowningProvider()
|
||||||
|
{
|
||||||
|
// Review 01 [Critical]: without downing-provider-class the entire
|
||||||
|
// split-brain-resolver section is inert (Akka default = NoDowning) and
|
||||||
|
// singletons never migrate on a hard crash.
|
||||||
|
var node = new NodeOptions { Role = "Central", NodeHostname = "node1", RemotingPort = 8081 };
|
||||||
|
|
||||||
|
var hocon = AkkaHostedService.BuildHocon(
|
||||||
|
node, DefaultCluster(), new[] { "Central" },
|
||||||
|
TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(15));
|
||||||
|
|
||||||
|
var config = ConfigurationFactory.ParseString(hocon);
|
||||||
|
Assert.Equal(
|
||||||
|
"Akka.Cluster.SBR.SplitBrainResolverProvider, Akka.Cluster",
|
||||||
|
config.GetString("akka.cluster.downing-provider-class"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user