From 3c595c21f896413b99c9d5996a82b5d3ed8ef8ad Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Thu, 7 Jul 2016 19:12:46 +0800 Subject: [PATCH] ceph_test_msgr: clean previous sent queue infos 1. A -> B 2. goto standby 3. B mark down 4. A reconnect to B 5. got reset session and dispatch remote reset 6. because remote reset is executed in DispatchQueue, it will be delayed 7. A -> B successfully and begin to send message 8. assert because we found the first message is missing but it's reasonble if policy.resetcheck is true Signed-off-by: Haomai Wang --- src/test/msgr/test_msgr.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/test/msgr/test_msgr.cc b/src/test/msgr/test_msgr.cc index df849665a78b7a..a94c77125b294c 100644 --- a/src/test/msgr/test_msgr.cc +++ b/src/test/msgr/test_msgr.cc @@ -777,12 +777,24 @@ class SyntheticDispatcher : public Dispatcher { } void ms_handle_fast_connect(Connection *con) { - lock.Lock(); + Mutex::Locker l(lock); + list c = conn_sent[con]; + for (list::iterator it = c.begin(); + it != c.end(); ++it) + sent.erase(*it); + conn_sent.erase(con); got_connect = true; cond.Signal(); - lock.Unlock(); } - void ms_handle_fast_accept(Connection *con) { } + void ms_handle_fast_accept(Connection *con) { + Mutex::Locker l(lock); + list c = conn_sent[con]; + for (list::iterator it = c.begin(); + it != c.end(); ++it) + sent.erase(*it); + conn_sent.erase(con); + cond.Signal(); + } bool ms_dispatch(Message *m) { assert(0); }