diff --git a/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala b/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala index aa5ffc3e0b..21b147e0f1 100644 --- a/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala +++ b/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala @@ -847,6 +847,7 @@ object Replicator { override def zero: DeltaReplicatedData = this override def delta: Option[ReplicatedDelta] = None override def resetDelta: ReplicatedData = this + override def toString: String = "NoDeltaPlaceholder" } } case object DeltaNack extends ReplicatorMessage with DeadLetterSuppression diff --git a/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorDeltaSpec.scala b/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorDeltaSpec.scala index d7e98361ef..f2caf9f8e7 100644 --- a/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorDeltaSpec.scala +++ b/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorDeltaSpec.scala @@ -331,6 +331,13 @@ class ReplicatorDeltaSpec extends MultiNodeSpec(ReplicatorDeltaSpec) with STMult // Thereafter delta can be propagated and applied again. deltaReplicator.tell(Update(KeyHigh, Highest(0), writeAll)(_.incr(100)), p1.ref) p1.expectMsgType[UpdateSuccess[_]] + // Flush the deltaPropagation buffer, otherwise it will contain + // NoDeltaPlaceholder from previous updates and the incr(4) delta will also + // be folded into NoDeltaPlaceholder and not propagated as delta. A few DeltaPropagationTick + // are needed to send to all and flush buffer. + roles.foreach { _ ⇒ + deltaReplicator ! Replicator.Internal.DeltaPropagationTick + } deltaReplicator.tell(Update(KeyHigh, Highest(0), WriteLocal)(_.incr(4)), p1.ref) p1.expectMsgType[UpdateSuccess[_]] }