From a05170c4199e51593b83a4205fb4f9c669b88fae Mon Sep 17 00:00:00 2001 From: Justin Peel Date: Tue, 10 Jul 2018 09:24:52 -0600 Subject: [PATCH] Check remembered entities before remembering entity (#25271) * Check remembered entities before remembering entity Messages that come through for an entity before StartEntity has been processed for that entity caused redundant persistence of the entity. --- .../src/main/scala/akka/cluster/sharding/Shard.scala | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/Shard.scala b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/Shard.scala index 71b2cf263a..1273affd70 100644 --- a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/Shard.scala +++ b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/Shard.scala @@ -455,11 +455,15 @@ private[akka] trait RememberingShard { selfType: Shard ⇒ context.child(name) match { case Some(actor) ⇒ actor.tell(payload, snd) - case None ⇒ - //Note; we only do this if remembering, otherwise the buffer is an overhead - messageBuffers.append(id, msg, snd) - processChange(EntityStarted(id))(sendMsgBuffer) + if (state.entities.contains(id)) { + require(!messageBuffers.contains(id), s"Message buffers contains id [$id].") + getEntity(id).tell(payload, snd) + } else { + //Note; we only do this if remembering, otherwise the buffer is an overhead + messageBuffers.append(id, msg, snd) + processChange(EntityStarted(id))(sendMsgBuffer) + } } }