diff options
author | Sage Weil <sage@inktank.com> | 2013-07-19 16:55:03 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-07-19 16:57:04 -0700 |
commit | 6d326b84248b6069e8c90acdf1389204848f1bd3 (patch) | |
tree | 3ba4b9fe2c128faa9bc61c2362da5eed9514e84b | |
parent | 8371680bab780933944dffd02246c73b17d6d930 (diff) | |
download | ceph-6d326b84248b6069e8c90acdf1389204848f1bd3.tar.gz |
mon/OSDMonitor: discard failure waiters, info on shutdown
This would prevent a leak, if we didn't assert before that in the
failure_reporter_t dtor.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/OSDMonitor.cc | 26 | ||||
-rw-r--r-- | src/mon/OSDMonitor.h | 2 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c41a59fa148..20e4eac88cb 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -310,13 +310,26 @@ void OSDMonitor::on_active() mon->clog.info() << "osdmap " << osdmap << "\n"; if (!mon->is_leader()) { - kick_all_failures(); + list<MOSDFailure*> ls; + take_all_failures(ls); + while (!ls.empty()) { + dispatch(ls.front()); + ls.pop_front(); + } } } void OSDMonitor::on_shutdown() { dout(10) << __func__ << dendl; + + // discard failure info, waiters + list<MOSDFailure*> ls; + take_all_failures(ls); + while (!ls.empty()) { + ls.front()->put(); + ls.pop_front(); + } } void OSDMonitor::update_logger() @@ -1039,23 +1052,16 @@ void OSDMonitor::process_failures() } } -void OSDMonitor::kick_all_failures() +void OSDMonitor::take_all_failures(list<MOSDFailure*>& ls) { - dout(10) << "kick_all_failures on " << failure_info.size() << " osds" << dendl; - assert(!mon->is_leader()); + dout(10) << __func__ << " on " << failure_info.size() << " osds" << dendl; - list<MOSDFailure*> ls; for (map<int,failure_info_t>::iterator p = failure_info.begin(); p != failure_info.end(); ++p) { p->second.take_report_messages(ls); } failure_info.clear(); - - while (!ls.empty()) { - dispatch(ls.front()); - ls.pop_front(); - } } diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index dda2374d7e8..d7cb8fdf369 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -209,7 +209,7 @@ private: bool prepare_failure(class MOSDFailure *m); bool prepare_mark_me_down(class MOSDMarkMeDown *m); void process_failures(); - void kick_all_failures(); + void take_all_failures(list<MOSDFailure*>& ls); bool preprocess_boot(class MOSDBoot *m); bool prepare_boot(class MOSDBoot *m); |