Hello According to this mail
http://sourceforge.net/p/ryu/mailman/message/34347766/ ryu can't get all flow entries if query time is longer than DEFAULT_TIMEOUT(1s). In this patch, I add few line to check new messages. keep waiting if new message came (length of msgs changed) I tried to add 40k flows and dump all flows by using REST API, and it works fine. -- Yi Tseng (a.k.a Takeshi) Taiwan National Chiao Tung University Department of Computer Science W2CNLab
From d6c85467975a56a064dfa7f6c14afe013c7390e2 Mon Sep 17 00:00:00 2001 From: Takeshi <[email protected]> Date: Wed, 5 Aug 2015 23:45:00 +0800 Subject: [PATCH] use idle timeout in ofctl to avoid incomplete querying --- ryu/lib/ofctl_v1_0.py | 8 ++++++++ ryu/lib/ofctl_v1_2.py | 8 ++++++++ ryu/lib/ofctl_v1_3.py | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/ryu/lib/ofctl_v1_0.py b/ryu/lib/ofctl_v1_0.py index 04b9b7d..939207b 100644 --- a/ryu/lib/ofctl_v1_0.py +++ b/ryu/lib/ofctl_v1_0.py @@ -274,10 +274,18 @@ def send_stats_request(dp, stats, waiters, msgs): dp.set_xid(stats) waiters_per_dp = waiters.setdefault(dp.id, {}) lock = hub.Event() + previous_msg_len = len(msgs) waiters_per_dp[stats.xid] = (lock, msgs) dp.send_msg(stats) lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + + while current_msg_len > previous_msg_len: + previous_msg_len = current_msg_len + lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + if not lock.is_set(): del waiters_per_dp[stats.xid] diff --git a/ryu/lib/ofctl_v1_2.py b/ryu/lib/ofctl_v1_2.py index 37f8792..038bb49 100644 --- a/ryu/lib/ofctl_v1_2.py +++ b/ryu/lib/ofctl_v1_2.py @@ -382,10 +382,18 @@ def send_stats_request(dp, stats, waiters, msgs): dp.set_xid(stats) waiters_per_dp = waiters.setdefault(dp.id, {}) lock = hub.Event() + previous_msg_len = len(msgs) waiters_per_dp[stats.xid] = (lock, msgs) dp.send_msg(stats) lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + + while current_msg_len > previous_msg_len: + previous_msg_len = current_msg_len + lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + if not lock.is_set(): del waiters_per_dp[stats.xid] diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py index 8490206..5b709f3 100644 --- a/ryu/lib/ofctl_v1_3.py +++ b/ryu/lib/ofctl_v1_3.py @@ -404,10 +404,18 @@ def send_stats_request(dp, stats, waiters, msgs): dp.set_xid(stats) waiters_per_dp = waiters.setdefault(dp.id, {}) lock = hub.Event() + previous_msg_len = len(msgs) waiters_per_dp[stats.xid] = (lock, msgs) dp.send_msg(stats) lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + + while current_msg_len > previous_msg_len: + previous_msg_len = current_msg_len + lock.wait(timeout=DEFAULT_TIMEOUT) + current_msg_len = len(msgs) + if not lock.is_set(): del waiters_per_dp[stats.xid] -- 2.3.2 (Apple Git-55)
------------------------------------------------------------------------------
_______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
