From a98191289d4409febb01cca3c738d7e58607dfe7 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Tue, 28 Aug 2018 14:23:33 +0200 Subject: [PATCH] fix negative math.abs in Sharding Typed, #25034 --- .../cluster/sharding/typed/ShardingMessageExtractor.scala | 4 ++-- .../src/main/scala/akka/cluster/sharding/ShardRegion.scala | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ShardingMessageExtractor.scala b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ShardingMessageExtractor.scala index daf5df6bf2..48e94c0b22 100644 --- a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ShardingMessageExtractor.scala +++ b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ShardingMessageExtractor.scala @@ -81,7 +81,7 @@ final class HashCodeMessageExtractor[A]( extends ShardingMessageExtractor[ShardingEnvelope[A], A] { override def entityId(envelope: ShardingEnvelope[A]): String = envelope.entityId - override def shardId(entityId: String): String = (math.abs(entityId.hashCode) % maxNumberOfShards).toString + override def shardId(entityId: String): String = math.abs(entityId.hashCode % maxNumberOfShards).toString override def unwrapMessage(envelope: ShardingEnvelope[A]): A = envelope.message } @@ -98,7 +98,7 @@ abstract class HashCodeNoEnvelopeMessageExtractor[A]( override val handOffStopMessage: A) extends ShardingMessageExtractor[A, A] { - override def shardId(entityId: String): String = (math.abs(entityId.hashCode) % maxNumberOfShards).toString + override def shardId(entityId: String): String = math.abs(entityId.hashCode % maxNumberOfShards).toString override final def unwrapMessage(message: A): A = message override def toString = s"HashCodeNoEnvelopeMessageExtractor($maxNumberOfShards)" diff --git a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala index f84189a18b..f726f48255 100644 --- a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala +++ b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala @@ -134,6 +134,9 @@ object ShardRegion { case ShardRegion.StartEntity(id) ⇒ id case _ ⇒ entityId(message) } + // It would be better to have abs(id.hashCode % maxNumberOfShards), see issue #25034 + // but to avoid getting different values when rolling upgrade we keep the old way, + // and it doesn't have any serious consequences (math.abs(id.hashCode) % maxNumberOfShards).toString } }