fix negative math.abs in Sharding Typed, #25034

This commit is contained in:
Patrik Nordwall 2018-08-28 14:23:33 +02:00
parent d5b2aea176
commit a98191289d
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
}
}