[ovs-dev] [PATCH 4/5] ofproto.at: Fix races in rule eviciton tests
YAMAMOTO Takashi
yamamoto at valinux.co.jp
Tue Apr 1 12:38:19 UTC 2014
>> +ovs-appctl time/warp 4000
>> AT_CHECK([ovs-ofctl mod-flows br0 in_port=1,actions=drop])
>> -sleep 2
>> +# At this point the table would looks like:
>> +# in_port seconds to expire
>> +# 1 13
>> +# 2 11
> This seems to be 12s to expire. And I realize that I made a mistake
> about warp 4000.
> It should be warp 5000 or even bigger.
> I'm so sorry to bother you so many times. I probably need a rest.
> Thanks for all your work.
apparently this math is too difficult for us. :-)
YAMAMOTO Takashi
commit 06f0a9e0e4da144e0bdc3a3b49d5f2572f67c626
Author: YAMAMOTO Takashi <yamamoto at valinux.co.jp>
Date: Mon Mar 31 14:04:35 2014 +0900
ofproto.at: Fix races in rule eviciton tests
Bump timeout differences, because timeouts different by 1s might end up
to have the same position in the heap as rule_eviction_priority() uses
1024ms as a unit.
Also, use time/stop to avoid relying on how long an add-flow would take.
These tests were introduced by commit 6d56c1f1.
("ofproto: Update rule's priority in eviction group.")
Signed-off-by: YAMAMOTO Takashi <yamamoto at valinux.co.jp>
Cc: Kmindg G <kmindg at gmail.com>
Acked-by: Ben Pfaff <blp at nicira.com>
diff --git a/tests/ofproto.at b/tests/ofproto.at
index e98b526..de2d004 100644
--- a/tests/ofproto.at
+++ b/tests/ofproto.at
@@ -1375,27 +1375,34 @@ AT_CHECK(
| ${PERL} $srcdir/uuidfilt.pl],
[0], [<0>
])
+ovs-appctl time/stop
# Add 4 flows.
for in_port in 4 3 2 1; do
- ovs-ofctl add-flow br0 hard_timeout=1${in_port},in_port=$in_port,actions=drop
+ ovs-ofctl add-flow br0 hard_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- hard_timeout=11, in_port=1 actions=drop
- hard_timeout=12, in_port=2 actions=drop
- hard_timeout=13, in_port=3 actions=drop
- hard_timeout=14, in_port=4 actions=drop
+ hard_timeout=13, in_port=1 actions=drop
+ hard_timeout=16, in_port=2 actions=drop
+ hard_timeout=19, in_port=3 actions=drop
+ hard_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and modify the one that expires soonest
-sleep 2
+ovs-appctl time/warp 5000
AT_CHECK([ovs-ofctl mod-flows br0 in_port=1,actions=drop])
-sleep 2
+# At this point the table would looks like:
+# in_port seconds to expire
+# 1 13
+# 2 11
+# 3 14
+# 4 17
+ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- hard_timeout=11, in_port=1 actions=drop
- hard_timeout=13, in_port=3 actions=drop
- hard_timeout=14, in_port=4 actions=drop
+ hard_timeout=13, in_port=1 actions=drop
+ hard_timeout=19, in_port=3 actions=drop
+ hard_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
NXST_FLOW reply:
])
@@ -1414,26 +1421,33 @@ AT_CHECK(
])
# Add 4 flows.
for in_port in 4 3 2 1; do
- ovs-ofctl add-flow br0 idle_timeout=1${in_port},in_port=$in_port,actions=drop
+ ovs-ofctl add-flow br0 idle_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
+ovs-appctl time/stop
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- idle_timeout=11, in_port=1 actions=drop
- idle_timeout=12, in_port=2 actions=drop
- idle_timeout=13, in_port=3 actions=drop
- idle_timeout=14, in_port=4 actions=drop
+ idle_timeout=13, in_port=1 actions=drop
+ idle_timeout=16, in_port=2 actions=drop
+ idle_timeout=19, in_port=3 actions=drop
+ idle_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and receive on the flow that expires soonest
-sleep 2
+ovs-appctl time/warp 5000
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1)'])
-sleep 2
+# At this point the table would looks like:
+# in_port seconds to expire
+# 1 13
+# 2 11
+# 3 14
+# 4 17
+ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- idle_timeout=13, in_port=3 actions=drop
- idle_timeout=14, in_port=4 actions=drop
+ idle_timeout=19, in_port=3 actions=drop
+ idle_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
- n_packets=1, n_bytes=60, idle_timeout=11, in_port=1 actions=drop
+ n_packets=1, n_bytes=60, idle_timeout=13, in_port=1 actions=drop
NXST_FLOW reply:
])
OVS_VSWITCHD_STOP
More information about the dev
mailing list