From 06f1945561f737d211dc0bde91391dc54ef76d2d Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 4 Jan 2013 12:59:45 +0100 Subject: [PATCH] Improve ReliableProxy resend across a slow link, see #2849 * The within margin was too small. On my machine the transition to Idle is done when 400 ms is remaining, which is too timing sensitive. * Improved the "resend across a slow link" test to actually trigger resending, which it didn't do before. --- .../contrib/pattern/ReliableProxySpec.scala | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala index 56d795c83b..cd2d2b6157 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ReliableProxySpec.scala @@ -171,12 +171,18 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod enterBarrier("test3b") } - "resend across a slow link" in { + "resend across a slow outbound link" in { runOn(local) { - testConductor.throttle(local, remote, Direction.Send, rateMBit = 0.1).await + // the rateMBit value is derived from empirical studies so that it will trigger resends, + // the exact value is not important, but it must not be too large + testConductor.throttle(local, remote, Direction.Send, rateMBit = 0.02).await sendN(50) within(5 seconds) { expectTransition(Idle, Active) + // use the slow link for a while, which will trigger resends + Thread.sleep(2000) + // full speed, and it will catch up outstanding messages + testConductor.passThrough(local, remote, Direction.Send).await expectTransition(Active, Idle) } } @@ -184,16 +190,25 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod within(5 seconds) { expectN(50) } + expectNoMsg(1 second) } - enterBarrier("test4a") + enterBarrier("test4") + } + "resend across a slow inbound link" in { runOn(local) { testConductor.passThrough(local, remote, Direction.Send).await - testConductor.throttle(local, remote, Direction.Receive, rateMBit = 0.1).await + // the rateMBit value is derived from empirical studies so that it will trigger resends, + // the exact value is not important, but it must not be too large + testConductor.throttle(local, remote, Direction.Receive, rateMBit = 0.02).await sendN(50) within(5 seconds) { expectTransition(Idle, Active) + // use the slow link for a while, which will trigger resends + Thread.sleep(2000) + // full speed, and it will catch up outstanding messages + testConductor.passThrough(local, remote, Direction.Receive).await expectTransition(Active, Idle) } } @@ -201,9 +216,10 @@ class ReliableProxySpec extends MultiNodeSpec(ReliableProxySpec) with STMultiNod within(1 second) { expectN(50) } + expectNoMsg(2 seconds) } - enterBarrier("test4b") + enterBarrier("test5") } }