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

View file

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

View file

@ -358,10 +358,17 @@ akka.cluster.sharding {
# Settings for the coordinator singleton. Same layout as akka.cluster.singleton. # Settings for the coordinator singleton. Same layout as akka.cluster.singleton.
# The "role" of the singleton configuration is not used. The singleton role will # 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 # A lease can be configured in these settings for the coordinator singleton
coordinator-singleton = ${akka.cluster.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 { coordinator-state {
# State updates are required to be written to a majority of nodes plus this # 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 # 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) .withFinalStopMessage(_ == ShardCoordinator.Internal.Terminate)
.props .props
.withDeploy(Deploy.local) .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( context.actorOf(
ClusterSingletonManager ClusterSingletonManager
.props(singletonProps, terminationMessage = ShardCoordinator.Internal.Terminate, singletonSettings) .props(singletonProps, terminationMessage = ShardCoordinator.Internal.Terminate, singletonSettings)

View file

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