Merge pull request #25542 from akka/wip-25034-abs-patriknw

fix negative math.abs in Sharding Typed, #25034
This commit is contained in:
Patrik Nordwall 2018-09-05 12:04:17 +02:00 committed by GitHub
commit 1f31024144
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 2 deletions

View file

@ -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)"

View file

@ -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
}
}