diff --git a/src/msg/Message.h b/src/msg/Message.h index 25b03722bcfd1..d9cd9a23bea02 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -446,10 +446,10 @@ class Message : public RefCountedObject { return get_source_inst(); } entity_name_t get_orig_source() const { - return get_orig_source_inst().name; + return get_source(); } entity_addr_t get_orig_source_addr() const { - return get_orig_source_inst().addr; + return get_source_addr(); } // virtual bits diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index dfec711335629..646a2aebadf47 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5887,6 +5887,7 @@ void OSD::dispatch_session_waiting(Session *session, OSDMapRef osdmap) } else { register_session_waiting_on_map(session); } + session->maybe_reset_osdmap(); } @@ -5965,6 +5966,7 @@ void OSD::session_notify_pg_cleared( assert(session->session_dispatch_lock.is_locked()); update_waiting_for_pg(session, osdmap); session->waiting_for_pg.erase(pgid); + session->maybe_reset_osdmap(); clear_session_waiting_on_pg(session, pgid); } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 8e4d24424633d..14fb6fb25ec0e 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1342,9 +1342,14 @@ class OSD : public Dispatcher, session_dispatch_lock("Session::session_dispatch_lock"), last_sent_epoch(0), received_map_epoch(0) {} - - + void maybe_reset_osdmap() { + if (waiting_for_pg.empty()) { + osdmap.reset(); + } + } }; + +private: void update_waiting_for_pg(Session *session, OSDMapRef osdmap); void session_notify_pg_create(Session *session, OSDMapRef osdmap, spg_t pgid); void session_notify_pg_cleared(Session *session, OSDMapRef osdmap, spg_t pgid); @@ -1442,6 +1447,7 @@ class OSD : public Dispatcher, */ session->waiting_on_map.clear(); session->waiting_for_pg.clear(); + session->osdmap.reset(); } void register_session_waiting_on_pg(Session *session, spg_t pgid) { Mutex::Locker l(session_waiting_lock); diff --git a/src/osd/OpRequest.cc b/src/osd/OpRequest.cc index 8805d1a62f0e5..9bad447b69fba 100644 --- a/src/osd/OpRequest.cc +++ b/src/osd/OpRequest.cc @@ -82,6 +82,7 @@ void OpRequest::_unregistered() { request->clear_data(); request->clear_payload(); request->release_message_throttle(); + request->set_connection(nullptr); } bool OpRequest::check_rmw(int flag) {