summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-07-19 16:55:03 -0700
committerSage Weil <sage@inktank.com>2013-07-19 16:57:04 -0700
commit6d326b84248b6069e8c90acdf1389204848f1bd3 (patch)
tree3ba4b9fe2c128faa9bc61c2362da5eed9514e84b
parent8371680bab780933944dffd02246c73b17d6d930 (diff)
downloadceph-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.cc26
-rw-r--r--src/mon/OSDMonitor.h2
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);