enabling shard coordinator to honor the provided role in the configu… (#31487)

* adding constructors for binary backwards compatibility
This commit is contained in:
Andrius Dapševičius 2022-09-05 10:13:34 +03:00 committed by GitHub
parent 224873696d
commit 422a5b8dae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 86 additions and 2 deletions

View file

@ -53,6 +53,7 @@ object ClusterShardingSettings {
stateStoreMode = StateStoreMode.byName(classicSettings.stateStoreMode),
rememberEntitiesStoreMode = RememberEntitiesStoreMode.byName(classicSettings.rememberEntitiesStore),
new TuningParameters(classicSettings.tuningParameters),
classicSettings.coordinatorSingletonOverrideRole,
new ClusterSingletonManagerSettings(
classicSettings.coordinatorSingletonSettings.singletonName,
classicSettings.coordinatorSingletonSettings.role,
@ -98,6 +99,7 @@ object ClusterShardingSettings {
coordinatorStateReadMajorityPlus = settings.tuningParameters.coordinatorStateReadMajorityPlus,
leastShardAllocationAbsoluteLimit = settings.tuningParameters.leastShardAllocationAbsoluteLimit,
leastShardAllocationRelativeLimit = settings.tuningParameters.leastShardAllocationRelativeLimit),
coordinatorSingletonOverrideRole = settings.coordinatorSingletonOverrideRole,
new ClassicClusterSingletonManagerSettings(
settings.coordinatorSingletonSettings.singletonName,
settings.coordinatorSingletonSettings.role,
@ -821,9 +823,41 @@ final class ClusterShardingSettings(
val stateStoreMode: ClusterShardingSettings.StateStoreMode,
val rememberEntitiesStoreMode: ClusterShardingSettings.RememberEntitiesStoreMode,
val tuningParameters: ClusterShardingSettings.TuningParameters,
val coordinatorSingletonOverrideRole: Boolean,
val coordinatorSingletonSettings: ClusterSingletonManagerSettings,
val leaseSettings: Option[LeaseUsageSettings]) {
@deprecated("Use constructor with coordinatorSingletonOverrideRole", "2.6.20")
def this(
numberOfShards: Int,
role: Option[String],
dataCenter: Option[DataCenter],
rememberEntities: Boolean,
journalPluginId: String,
snapshotPluginId: String,
passivationStrategySettings: ClusterShardingSettings.PassivationStrategySettings,
shardRegionQueryTimeout: FiniteDuration,
stateStoreMode: ClusterShardingSettings.StateStoreMode,
rememberEntitiesStoreMode: ClusterShardingSettings.RememberEntitiesStoreMode,
tuningParameters: ClusterShardingSettings.TuningParameters,
coordinatorSingletonSettings: ClusterSingletonManagerSettings,
leaseSettings: Option[LeaseUsageSettings]) =
this(
numberOfShards,
role,
dataCenter,
rememberEntities,
journalPluginId,
snapshotPluginId,
passivationStrategySettings,
shardRegionQueryTimeout,
stateStoreMode,
rememberEntitiesStoreMode,
tuningParameters,
true,
coordinatorSingletonSettings,
leaseSettings)
@deprecated("Use constructor with passivationStrategySettings", "2.6.18")
def this(
numberOfShards: Int,
@ -851,6 +885,7 @@ final class ClusterShardingSettings(
stateStoreMode,
rememberEntitiesStoreMode,
tuningParameters,
true,
coordinatorSingletonSettings,
leaseSettings)
@ -995,6 +1030,7 @@ final class ClusterShardingSettings(
stateStoreMode: ClusterShardingSettings.StateStoreMode = stateStoreMode,
rememberEntitiesStoreMode: ClusterShardingSettings.RememberEntitiesStoreMode = rememberEntitiesStoreMode,
tuningParameters: ClusterShardingSettings.TuningParameters = tuningParameters,
coordinatorSingletonOverrideRole: Boolean = coordinatorSingletonOverrideRole,
coordinatorSingletonSettings: ClusterSingletonManagerSettings = coordinatorSingletonSettings,
passivationStrategySettings: ClusterShardingSettings.PassivationStrategySettings = passivationStrategySettings,
shardRegionQueryTimeout: FiniteDuration = shardRegionQueryTimeout,
@ -1011,6 +1047,7 @@ final class ClusterShardingSettings(
stateStoreMode,
rememberEntitiesStoreMode,
tuningParameters,
coordinatorSingletonOverrideRole,
coordinatorSingletonSettings,
leaseSettings)
}

View file

@ -150,6 +150,7 @@ private[akka] final class ShardedDaemonProcessImpl(system: ActorSystem[_])
StateStoreModeDData,
RememberEntitiesStoreModeDData, // not used as remembered entities is off
shardingBaseSettings.tuningParameters,
shardingBaseSettings.coordinatorSingletonOverrideRole,
shardingBaseSettings.coordinatorSingletonSettings,
shardingBaseSettings.leaseSettings)
}

View file

@ -358,10 +358,17 @@ akka.cluster.sharding {
# Settings for the coordinator singleton. Same layout as akka.cluster.singleton.
# The "role" of the singleton configuration is not used. The singleton role will
# be the same as "akka.cluster.sharding.role".
# be the same as "akka.cluster.sharding.role" if
# "akka.cluster.sharding.coordinator-singleton-role-override" is enabled. Disabling it will allow to
# use separate nodes for the shard coordinator and the shards themselves.
# A lease can be configured in these settings for the coordinator singleton
coordinator-singleton = ${akka.cluster.singleton}
# Copies the role for the coordinator singleton from the shards role instead of using the one provided in the
# "akka.cluster.sharding.coordinator-singleton.role"
coordinator-singleton-role-override = on
coordinator-state {
# State updates are required to be written to a majority of nodes plus this
# number of additional nodes. Can also be set to "all" to require

View file

@ -805,7 +805,13 @@ private[akka] class ClusterShardingGuardian extends Actor {
.withFinalStopMessage(_ == ShardCoordinator.Internal.Terminate)
.props
.withDeploy(Deploy.local)
val singletonSettings = settings.coordinatorSingletonSettings.withSingletonName("singleton").withRole(role)
val singletonSettings = if (settings.coordinatorSingletonOverrideRole) {
settings.coordinatorSingletonSettings.withSingletonName("singleton").withRole(role)
} else {
settings.coordinatorSingletonSettings.withSingletonName("singleton")
}
context.actorOf(
ClusterSingletonManager
.props(singletonProps, terminationMessage = ShardCoordinator.Internal.Terminate, singletonSettings)

View file

@ -107,6 +107,7 @@ object ClusterShardingSettings {
passivationStrategySettings = passivationStrategySettings,
shardRegionQueryTimeout = config.getDuration("shard-region-query-timeout", MILLISECONDS).millis,
tuningParameters,
config.getBoolean("coordinator-singleton-role-override"),
coordinatorSingletonSettings,
lease)
}
@ -1122,9 +1123,38 @@ final class ClusterShardingSettings(
val passivationStrategySettings: ClusterShardingSettings.PassivationStrategySettings,
val shardRegionQueryTimeout: FiniteDuration,
val tuningParameters: ClusterShardingSettings.TuningParameters,
val coordinatorSingletonOverrideRole: Boolean,
val coordinatorSingletonSettings: ClusterSingletonManagerSettings,
val leaseSettings: Option[LeaseUsageSettings])
extends NoSerializationVerificationNeeded {
@deprecated(
"Use the ClusterShardingSettings factory methods or the constructor including coordinatorSingletonOverrideRole instead",
"2.6.20")
def this(
role: Option[String],
rememberEntities: Boolean,
journalPluginId: String,
snapshotPluginId: String,
stateStoreMode: String,
rememberEntitiesStore: String,
passivationStrategySettings: ClusterShardingSettings.PassivationStrategySettings,
shardRegionQueryTimeout: FiniteDuration,
tuningParameters: ClusterShardingSettings.TuningParameters,
coordinatorSingletonSettings: ClusterSingletonManagerSettings,
leaseSettings: Option[LeaseUsageSettings]) =
this(
role,
rememberEntities,
journalPluginId,
snapshotPluginId,
stateStoreMode,
rememberEntitiesStore,
passivationStrategySettings,
shardRegionQueryTimeout,
tuningParameters,
true,
coordinatorSingletonSettings,
leaseSettings)
@deprecated(
"Use the ClusterShardingSettings factory methods or the constructor including passivationStrategySettings instead",
@ -1151,6 +1181,7 @@ final class ClusterShardingSettings(
ClusterShardingSettings.PassivationStrategySettings.oldDefault(passivateIdleEntityAfter),
shardRegionQueryTimeout,
tuningParameters,
true,
coordinatorSingletonSettings,
leaseSettings)
@ -1335,6 +1366,7 @@ final class ClusterShardingSettings(
passivationStrategySettings: ClusterShardingSettings.PassivationStrategySettings = passivationStrategySettings,
shardRegionQueryTimeout: FiniteDuration = shardRegionQueryTimeout,
tuningParameters: ClusterShardingSettings.TuningParameters = tuningParameters,
coordinatorSingletonOverrideRole: Boolean = coordinatorSingletonOverrideRole,
coordinatorSingletonSettings: ClusterSingletonManagerSettings = coordinatorSingletonSettings,
leaseSettings: Option[LeaseUsageSettings] = leaseSettings): ClusterShardingSettings =
new ClusterShardingSettings(
@ -1347,6 +1379,7 @@ final class ClusterShardingSettings(
passivationStrategySettings,
shardRegionQueryTimeout,
tuningParameters,
coordinatorSingletonOverrideRole,
coordinatorSingletonSettings,
leaseSettings)
}