/// <summary> /// TBD /// </summary> /// <param name="tuningParameters">TBD</param> /// <exception cref="ArgumentNullException"> /// This exception is thrown when the specified <paramref name="tuningParameters"/> is undefined. /// </exception> /// <returns>TBD</returns> public ClusterShardingSettings WithTuningParameters(TuningParameters tuningParameters) { if (tuningParameters == null) { throw new ArgumentNullException(nameof(tuningParameters), $"ClusterShardingSettings requires {nameof(tuningParameters)} to be provided"); } return(Copy(tuningParameters: tuningParameters)); }
/// <summary> /// TBD /// </summary> /// <param name="role">TBD</param> /// <param name="rememberEntities">TBD</param> /// <param name="journalPluginId">TBD</param> /// <param name="snapshotPluginId">TBD</param> /// <param name="passivateIdleEntityAfter">TBD</param> /// <param name="stateStoreMode">TBD</param> /// <param name="tuningParameters">TBD</param> /// <param name="coordinatorSingletonSettings">TBD</param> public ClusterShardingSettings( string role, bool rememberEntities, string journalPluginId, string snapshotPluginId, TimeSpan passivateIdleEntityAfter, StateStoreMode stateStoreMode, TuningParameters tuningParameters, ClusterSingletonManagerSettings coordinatorSingletonSettings) : this(role, rememberEntities, journalPluginId, snapshotPluginId, passivateIdleEntityAfter, stateStoreMode, tuningParameters, coordinatorSingletonSettings, null) { }
/// <summary> /// TBD /// </summary> /// <param name="role">TBD</param> /// <param name="rememberEntities">TBD</param> /// <param name="journalPluginId">TBD</param> /// <param name="snapshotPluginId">TBD</param> /// <param name="passivateIdleEntityAfter">TBD</param> /// <param name="stateStoreMode">TBD</param> /// <param name="tuningParameters">TBD</param> /// <param name="coordinatorSingletonSettings">TBD</param> /// <param name="leaseSettings">TBD</param> public ClusterShardingSettings( string role, bool rememberEntities, string journalPluginId, string snapshotPluginId, TimeSpan passivateIdleEntityAfter, StateStoreMode stateStoreMode, TuningParameters tuningParameters, ClusterSingletonManagerSettings coordinatorSingletonSettings, LeaseUsageSettings leaseSettings) { Role = role; RememberEntities = rememberEntities; JournalPluginId = journalPluginId; SnapshotPluginId = snapshotPluginId; PassivateIdleEntityAfter = passivateIdleEntityAfter; StateStoreMode = stateStoreMode; TuningParameters = tuningParameters; CoordinatorSingletonSettings = coordinatorSingletonSettings; LeaseSettings = leaseSettings; }
private ClusterShardingSettings Copy( Option <string> role = default, bool?rememberEntities = null, string journalPluginId = null, string snapshotPluginId = null, TimeSpan?passivateIdleAfter = null, StateStoreMode?stateStoreMode = null, TuningParameters tuningParameters = null, ClusterSingletonManagerSettings coordinatorSingletonSettings = null, Option <LeaseUsageSettings> leaseSettings = default) { return(new ClusterShardingSettings( role: role.HasValue?role.Value: Role, rememberEntities: rememberEntities ?? RememberEntities, journalPluginId: journalPluginId ?? JournalPluginId, snapshotPluginId: snapshotPluginId ?? SnapshotPluginId, passivateIdleEntityAfter: passivateIdleAfter ?? PassivateIdleEntityAfter, stateStoreMode: stateStoreMode ?? StateStoreMode, tuningParameters: tuningParameters ?? TuningParameters, coordinatorSingletonSettings: coordinatorSingletonSettings ?? CoordinatorSingletonSettings, leaseSettings: leaseSettings.HasValue ? leaseSettings.Value : LeaseSettings)); }
/// <summary> /// TBD /// </summary> /// <param name="config">TBD</param> /// <param name="singletonConfig">TBD</param> /// <returns>TBD</returns> public static ClusterShardingSettings Create(Config config, Config singletonConfig) { if (config.IsNullOrEmpty()) { throw ConfigurationException.NullOrEmptyConfig <ClusterShardingSettings>(); } var tuningParameters = new TuningParameters( coordinatorFailureBackoff: config.GetTimeSpan("coordinator-failure-backoff"), retryInterval: config.GetTimeSpan("retry-interval"), bufferSize: config.GetInt("buffer-size"), handOffTimeout: config.GetTimeSpan("handoff-timeout"), shardStartTimeout: config.GetTimeSpan("shard-start-timeout"), shardFailureBackoff: config.GetTimeSpan("shard-failure-backoff"), entityRestartBackoff: config.GetTimeSpan("entity-restart-backoff"), rebalanceInterval: config.GetTimeSpan("rebalance-interval"), snapshotAfter: config.GetInt("snapshot-after"), keepNrOfBatches: config.GetInt("keep-nr-of-batches"), leastShardAllocationRebalanceThreshold: config.GetInt("least-shard-allocation-strategy.rebalance-threshold"), leastShardAllocationMaxSimultaneousRebalance: config.GetInt("least-shard-allocation-strategy.max-simultaneous-rebalance"), waitingForStateTimeout: config.GetTimeSpan("waiting-for-state-timeout"), updatingStateTimeout: config.GetTimeSpan("updating-state-timeout"), entityRecoveryStrategy: config.GetString("entity-recovery-strategy"), entityRecoveryConstantRateStrategyFrequency: config.GetTimeSpan("entity-recovery-constant-rate-strategy.frequency"), entityRecoveryConstantRateStrategyNumberOfEntities: config.GetInt("entity-recovery-constant-rate-strategy.number-of-entities"), leastShardAllocationAbsoluteLimit: config.GetInt("least-shard-allocation-strategy.rebalance-absolute-limit"), leastShardAllocationRelativeLimit: config.GetDouble("least-shard-allocation-strategy.rebalance-relative-limit")); var coordinatorSingletonSettings = ClusterSingletonManagerSettings.Create(singletonConfig); var role = config.GetString("role", null); if (role == string.Empty) { role = null; } var usePassivateIdle = config.GetString("passivate-idle-entity-after").ToLowerInvariant(); var passivateIdleAfter = usePassivateIdle.Equals("off") || usePassivateIdle.Equals("false") || usePassivateIdle.Equals("no") ? TimeSpan.Zero : config.GetTimeSpan("passivate-idle-entity-after"); LeaseUsageSettings lease = null; var leaseConfigPath = config.GetString("use-lease"); if (!string.IsNullOrEmpty(leaseConfigPath)) { lease = new LeaseUsageSettings(leaseConfigPath, config.GetTimeSpan("lease-retry-interval")); } return(new ClusterShardingSettings( role: role, rememberEntities: config.GetBoolean("remember-entities"), journalPluginId: config.GetString("journal-plugin-id"), snapshotPluginId: config.GetString("snapshot-plugin-id"), passivateIdleEntityAfter: passivateIdleAfter, stateStoreMode: (StateStoreMode)Enum.Parse(typeof(StateStoreMode), config.GetString("state-store-mode"), ignoreCase: true), tuningParameters: tuningParameters, coordinatorSingletonSettings: coordinatorSingletonSettings, leaseSettings: lease)); }