From e3511dc263b4e859b64d6bccb5db64b8f7305f04 Mon Sep 17 00:00:00 2001 From: Vagif Abilov Date: Tue, 30 Aug 2022 15:44:40 +0200 Subject: [PATCH] Extend DistributedData Replicator settings with VerboseDebugLogging switch (#6080) * Add verbose-debug-logging to Replication settings * Add VerboseDebugLogging to verified tests * Correct verified.txt * added backwards compat constructor, fixed approvals * updated `ReplicatorSettingsSpec` Co-authored-by: Aaron Stannard --- .../ReplicatorSettingsSpec.cs | 2 + .../Akka.DistributedData/Replicator.cs | 2 +- .../ReplicatorSettings.cs | 56 +++++++++++++++++-- .../Akka.DistributedData/reference.conf | 4 ++ ...c.ApproveDistributedData.Core.verified.txt | 4 ++ ...ApproveDistributedData.DotNet.verified.txt | 4 ++ ...ec.ApproveDistributedData.Net.verified.txt | 4 ++ ...PISpec.ApproveDistributedData.verified.txt | 4 ++ 8 files changed, 75 insertions(+), 5 deletions(-) diff --git a/src/contrib/cluster/Akka.DistributedData.Tests/ReplicatorSettingsSpec.cs b/src/contrib/cluster/Akka.DistributedData.Tests/ReplicatorSettingsSpec.cs index ee819ca4b74..05aa1c3fbf9 100644 --- a/src/contrib/cluster/Akka.DistributedData.Tests/ReplicatorSettingsSpec.cs +++ b/src/contrib/cluster/Akka.DistributedData.Tests/ReplicatorSettingsSpec.cs @@ -10,6 +10,7 @@ using Akka.Configuration; using Akka.Dispatch; using Akka.TestKit; +using FluentAssertions; using Xunit; namespace Akka.DistributedData.Tests @@ -39,6 +40,7 @@ public void SettingsShouldContainProperDefaultValues() settings.DurableKeys.Count.ShouldBe(0); settings.DurableStoreProps.ShouldBe(Props.Empty); settings.DurablePruningMarkerTimeToLive.ShouldBe(TimeSpan.FromDays(10)); + settings.VerboseDebugLogging.Should().BeFalse(); Sys.Settings.Config.GetTimeSpan("akka.cluster.distributed-data.serializer-cache-time-to-live") .ShouldBe(TimeSpan.FromSeconds(10)); diff --git a/src/contrib/cluster/Akka.DistributedData/Replicator.cs b/src/contrib/cluster/Akka.DistributedData/Replicator.cs index 6372fd4a382..2d7f8c1083f 100644 --- a/src/contrib/cluster/Akka.DistributedData/Replicator.cs +++ b/src/contrib/cluster/Akka.DistributedData/Replicator.cs @@ -1150,7 +1150,7 @@ private bool IsOtherDifferent(string key, Digest otherDigest) private void ReceiveStatus(IImmutableDictionary otherDigests, int chunk, int totChunks) { - if (_log.IsDebugEnabled) + if (_log.IsDebugEnabled && _settings.VerboseDebugLogging) _log.Debug("Received gossip status from [{0}], chunk {1}/{2} containing [{3}]", Sender.Path.Address, chunk + 1, totChunks, string.Join(", ", otherDigests.Keys)); // if no data was send we do nothing diff --git a/src/contrib/cluster/Akka.DistributedData/ReplicatorSettings.cs b/src/contrib/cluster/Akka.DistributedData/ReplicatorSettings.cs index 3906d52d2aa..609519f7023 100644 --- a/src/contrib/cluster/Akka.DistributedData/ReplicatorSettings.cs +++ b/src/contrib/cluster/Akka.DistributedData/ReplicatorSettings.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Immutable; using System.Collections.Generic; +using Akka.Event; namespace Akka.DistributedData { @@ -79,7 +80,8 @@ public static ReplicatorSettings Create(Config config) durablePruningMarkerTimeToLive: durableConfig.GetTimeSpan("pruning-marker-time-to-live", TimeSpan.FromDays(10)), maxDeltaSize: config.GetInt("delta-crdt.max-delta-size", 50), restartReplicatorOnFailure: config.GetBoolean("recreate-on-failure", false), - preferOldest: config.GetBoolean("prefer-oldest")); + preferOldest: config.GetBoolean("prefer-oldest"), + verboseDebugLogging: config.GetBoolean("verbose-debug-logging")); } /// @@ -159,6 +161,11 @@ public static ReplicatorSettings Create(Config config) /// public bool PreferOldest { get; } + /// + /// Whether verbose debug logging is enabled. + /// + public bool VerboseDebugLogging { get; } + [Obsolete] public ReplicatorSettings(string role, TimeSpan gossipInterval, @@ -218,10 +225,45 @@ public ReplicatorSettings(string role, durablePruningMarkerTimeToLive, maxDeltaSize, false, + false, false ) { } + + [Obsolete] + public ReplicatorSettings(string role, + TimeSpan gossipInterval, + TimeSpan notifySubscribersInterval, + int maxDeltaElements, + string dispatcher, + TimeSpan pruningInterval, + TimeSpan maxPruningDissemination, + IImmutableSet durableKeys, + Props durableStoreProps, + TimeSpan pruningMarkerTimeToLive, + TimeSpan durablePruningMarkerTimeToLive, + int maxDeltaSize, + bool restartReplicatorOnFailure, + bool preferOldest) : this( + role, + gossipInterval, + notifySubscribersInterval, + maxDeltaElements, + dispatcher, + pruningInterval, + maxPruningDissemination, + durableKeys, + durableStoreProps, + pruningMarkerTimeToLive, + durablePruningMarkerTimeToLive, + maxDeltaSize, + restartReplicatorOnFailure, + preferOldest, + false + ) + { + } public ReplicatorSettings(string role, TimeSpan gossipInterval, @@ -236,7 +278,8 @@ public ReplicatorSettings(string role, TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, - bool preferOldest) + bool preferOldest, + bool verboseDebugLogging) { Role = role; GossipInterval = gossipInterval; @@ -252,6 +295,7 @@ public ReplicatorSettings(string role, MaxDeltaSize = maxDeltaSize; RestartReplicatorOnFailure = restartReplicatorOnFailure; PreferOldest = preferOldest; + VerboseDebugLogging = verboseDebugLogging; } private ReplicatorSettings Copy(string role = null, @@ -267,7 +311,8 @@ private ReplicatorSettings Copy(string role = null, TimeSpan? durablePruningMarkerTimeToLive = null, int? maxDeltaSize = null, bool? restartReplicatorOnFailure = null, - bool? preferOldest = null) + bool? preferOldest = null, + bool? verboseDebugLogging = null) { return new ReplicatorSettings( role: role ?? this.Role, @@ -283,7 +328,8 @@ private ReplicatorSettings Copy(string role = null, durablePruningMarkerTimeToLive: durablePruningMarkerTimeToLive ?? this.DurablePruningMarkerTimeToLive, maxDeltaSize: maxDeltaSize ?? this.MaxDeltaSize, restartReplicatorOnFailure: restartReplicatorOnFailure ?? this.RestartReplicatorOnFailure, - preferOldest: preferOldest ?? this.PreferOldest); + preferOldest: preferOldest ?? this.PreferOldest, + verboseDebugLogging: verboseDebugLogging ?? this.VerboseDebugLogging); } public ReplicatorSettings WithRole(string role) => Copy(role: role); @@ -302,5 +348,7 @@ public ReplicatorSettings WithRestartReplicatorOnFailure(bool restart) => Copy(restartReplicatorOnFailure: restart); public ReplicatorSettings WithPreferOldest(bool preferOldest) => Copy(preferOldest: preferOldest); + public ReplicatorSettings WithVerboseDebugLogging(bool verboseDebugLogging) => + Copy(verboseDebugLogging: verboseDebugLogging); } } diff --git a/src/contrib/cluster/Akka.DistributedData/reference.conf b/src/contrib/cluster/Akka.DistributedData/reference.conf index bfc1235da41..fcb62243c73 100644 --- a/src/contrib/cluster/Akka.DistributedData/reference.conf +++ b/src/contrib/cluster/Akka.DistributedData/reference.conf @@ -62,6 +62,10 @@ akka.cluster.distributed-data { # This is useful together with Cluster Singleton, which is running on oldest nodes. prefer-oldest = off + # Provide a higher level of details in the debug logs, including gossip status. + # Be careful about enabling in production systems. + verbose-debug-logging = off + # Settings for delta-CRDT delta-crdt { # enable or disable delta-CRDT replication diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt index 9e55ced9b36..0b592f46e45 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt @@ -777,7 +777,9 @@ namespace Akka.DistributedData public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize) { } [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure) { } + [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest) { } + public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest, bool verboseDebugLogging) { } public string Dispatcher { get; } public System.Collections.Immutable.IImmutableSet DurableKeys { get; } public System.TimeSpan DurablePruningMarkerTimeToLive { get; } @@ -793,6 +795,7 @@ namespace Akka.DistributedData public System.TimeSpan PruningMarkerTimeToLive { get; } public bool RestartReplicatorOnFailure { get; } public string Role { get; } + public bool VerboseDebugLogging { get; } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Actor.ActorSystem system) { } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Configuration.Config config) { } public Akka.DistributedData.ReplicatorSettings WithDispatcher(string dispatcher) { } @@ -807,6 +810,7 @@ namespace Akka.DistributedData public Akka.DistributedData.ReplicatorSettings WithPruningMarkerTimeToLive(System.TimeSpan pruningMarkerTtl, System.TimeSpan durablePruningMarkerTtl) { } public Akka.DistributedData.ReplicatorSettings WithRestartReplicatorOnFailure(bool restart) { } public Akka.DistributedData.ReplicatorSettings WithRole(string role) { } + public Akka.DistributedData.ReplicatorSettings WithVerboseDebugLogging(bool verboseDebugLogging) { } } [System.Diagnostics.DebuggerDisplayAttribute("VersionVector({Node}->{Version})")] public sealed class SingleVersionVector : Akka.DistributedData.VersionVector diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt index 4948240e353..b49021b5298 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt @@ -777,7 +777,9 @@ namespace Akka.DistributedData public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize) { } [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure) { } + [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest) { } + public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest, bool verboseDebugLogging) { } public string Dispatcher { get; } public System.Collections.Immutable.IImmutableSet DurableKeys { get; } public System.TimeSpan DurablePruningMarkerTimeToLive { get; } @@ -793,6 +795,7 @@ namespace Akka.DistributedData public System.TimeSpan PruningMarkerTimeToLive { get; } public bool RestartReplicatorOnFailure { get; } public string Role { get; } + public bool VerboseDebugLogging { get; } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Actor.ActorSystem system) { } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Configuration.Config config) { } public Akka.DistributedData.ReplicatorSettings WithDispatcher(string dispatcher) { } @@ -807,6 +810,7 @@ namespace Akka.DistributedData public Akka.DistributedData.ReplicatorSettings WithPruningMarkerTimeToLive(System.TimeSpan pruningMarkerTtl, System.TimeSpan durablePruningMarkerTtl) { } public Akka.DistributedData.ReplicatorSettings WithRestartReplicatorOnFailure(bool restart) { } public Akka.DistributedData.ReplicatorSettings WithRole(string role) { } + public Akka.DistributedData.ReplicatorSettings WithVerboseDebugLogging(bool verboseDebugLogging) { } } [System.Diagnostics.DebuggerDisplayAttribute("VersionVector({Node}->{Version})")] public sealed class SingleVersionVector : Akka.DistributedData.VersionVector diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt index 9e55ced9b36..0b592f46e45 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt @@ -777,7 +777,9 @@ namespace Akka.DistributedData public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize) { } [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure) { } + [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest) { } + public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest, bool verboseDebugLogging) { } public string Dispatcher { get; } public System.Collections.Immutable.IImmutableSet DurableKeys { get; } public System.TimeSpan DurablePruningMarkerTimeToLive { get; } @@ -793,6 +795,7 @@ namespace Akka.DistributedData public System.TimeSpan PruningMarkerTimeToLive { get; } public bool RestartReplicatorOnFailure { get; } public string Role { get; } + public bool VerboseDebugLogging { get; } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Actor.ActorSystem system) { } public static Akka.DistributedData.ReplicatorSettings Create(Akka.Configuration.Config config) { } public Akka.DistributedData.ReplicatorSettings WithDispatcher(string dispatcher) { } @@ -807,6 +810,7 @@ namespace Akka.DistributedData public Akka.DistributedData.ReplicatorSettings WithPruningMarkerTimeToLive(System.TimeSpan pruningMarkerTtl, System.TimeSpan durablePruningMarkerTtl) { } public Akka.DistributedData.ReplicatorSettings WithRestartReplicatorOnFailure(bool restart) { } public Akka.DistributedData.ReplicatorSettings WithRole(string role) { } + public Akka.DistributedData.ReplicatorSettings WithVerboseDebugLogging(bool verboseDebugLogging) { } } [System.Diagnostics.DebuggerDisplayAttribute("VersionVector({Node}->{Version})")] public sealed class SingleVersionVector : Akka.DistributedData.VersionVector diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.verified.txt index 9e55ced9b36..d7349e0d12a 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.verified.txt @@ -777,7 +777,9 @@ namespace Akka.DistributedData public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize) { } [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure) { } + [System.ObsoleteAttribute()] public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest) { } + public ReplicatorSettings(string role, System.TimeSpan gossipInterval, System.TimeSpan notifySubscribersInterval, int maxDeltaElements, string dispatcher, System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination, System.Collections.Immutable.IImmutableSet durableKeys, Akka.Actor.Props durableStoreProps, System.TimeSpan pruningMarkerTimeToLive, System.TimeSpan durablePruningMarkerTimeToLive, int maxDeltaSize, bool restartReplicatorOnFailure, bool preferOldest, bool verboseDebugLogging) { } public string Dispatcher { get; } public System.Collections.Immutable.IImmutableSet DurableKeys { get; } public System.TimeSpan DurablePruningMarkerTimeToLive { get; } @@ -789,6 +791,7 @@ namespace Akka.DistributedData public System.TimeSpan MaxPruningDissemination { get; } public System.TimeSpan NotifySubscribersInterval { get; } public bool PreferOldest { get; } + public bool VerboseDebugLogging { get; } public System.TimeSpan PruningInterval { get; } public System.TimeSpan PruningMarkerTimeToLive { get; } public bool RestartReplicatorOnFailure { get; } @@ -803,6 +806,7 @@ namespace Akka.DistributedData public Akka.DistributedData.ReplicatorSettings WithMaxDeltaSize(int maxDeltaSize) { } public Akka.DistributedData.ReplicatorSettings WithNotifySubscribersInterval(System.TimeSpan notifySubscribersInterval) { } public Akka.DistributedData.ReplicatorSettings WithPreferOldest(bool preferOldest) { } + public Akka.DistributedData.ReplicatorSettings WithVerboseDebugLogging(bool verboseDebugLogging) { } public Akka.DistributedData.ReplicatorSettings WithPruning(System.TimeSpan pruningInterval, System.TimeSpan maxPruningDissemination) { } public Akka.DistributedData.ReplicatorSettings WithPruningMarkerTimeToLive(System.TimeSpan pruningMarkerTtl, System.TimeSpan durablePruningMarkerTtl) { } public Akka.DistributedData.ReplicatorSettings WithRestartReplicatorOnFailure(bool restart) { }