From 482eccd13e19cc0a7f731fbd5c6f8ea560f0c70c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 26 Mar 2019 17:38:36 -0700 Subject: [PATCH] osd/: move check_recovery_sources and missing_loc into PeeringState Signed-off-by: Samuel Just --- src/osd/PG.cc | 2 +- src/osd/PG.h | 6 +----- src/osd/PeeringState.cc | 39 +++++++++++++++++++++++++++++++++++++-- src/osd/PeeringState.h | 4 ++++ src/osd/PrimaryLogPG.cc | 27 --------------------------- 5 files changed, 43 insertions(+), 35 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 728e9fbda02..1c9ee2c5beb 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -231,6 +231,7 @@ PG::PG(OSDService *o, OSDMapRef curmap, might_have_unfound(recovery_state.might_have_unfound), deleting(recovery_state.deleting), deleted(recovery_state.deleted), + missing_loc(recovery_state.missing_loc), pg_id(p), coll(p), osd(o), @@ -247,7 +248,6 @@ PG::PG(OSDService *o, OSDMapRef curmap, trace_endpoint("0.0.0.0", 0, "PG"), info_struct_v(0), pgmeta_oid(p.make_pgmeta_oid()), - missing_loc(info.pgid, &recovery_state, this, cct), stat_queue_item(this), scrub_queued(false), recovery_queued(false), diff --git a/src/osd/PG.h b/src/osd/PG.h index 069cf168936..b1c4c164162 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -226,6 +226,7 @@ protected: set &might_have_unfound; bool &deleting; atomic &deleted; + MissingLoc &missing_loc; public: // -- members -- @@ -594,10 +595,6 @@ protected: ghobject_t pgmeta_oid; // ------------------ - // MissingLoc - - MissingLoc missing_loc; - interval_set snap_trimq; /* You should not use these items without taking their respective queue locks @@ -1136,7 +1133,6 @@ protected: void cancel_recovery(); void clear_recovery_state(); virtual void _clear_recovery_state() = 0; - virtual void check_recovery_sources(const OSDMapRef& newmap) = 0; void start_recovery_op(const hobject_t& soid); void finish_recovery_op(const hobject_t& soid, bool dequeue=false); diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 68aadddec47..694aebae159 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -128,10 +128,44 @@ PeeringState::PeeringState( osdmap_ref(curmap), pool(_pool), info(spgid), - pg_log(cct) { + pg_log(cct), + missing_loc(spgid, this, dpp, cct) +{ machine.initiate(); } +void PeeringState::check_recovery_sources(const OSDMapRef& osdmap) +{ + /* + * check that any peers we are planning to (or currently) pulling + * objects from are dealt with. + */ + missing_loc.check_recovery_sources(osdmap); + pl->check_recovery_sources(osdmap); + + for (set::iterator i = peer_log_requested.begin(); + i != peer_log_requested.end(); + ) { + if (!osdmap->is_up(i->osd)) { + dout(10) << "peer_log_requested removing " << *i << dendl; + peer_log_requested.erase(i++); + } else { + ++i; + } + } + + for (set::iterator i = peer_missing_requested.begin(); + i != peer_missing_requested.end(); + ) { + if (!osdmap->is_up(i->osd)) { + dout(10) << "peer_missing_requested removing " << *i << dendl; + peer_missing_requested.erase(i++); + } else { + ++i; + } + } +} + void PeeringState::update_history(const pg_history_t& new_history) { pl->unreg_next_scrub(); @@ -254,7 +288,8 @@ void PeeringState::remove_down_peer_info(const OSDMapRef &osdmap) // if we removed anyone, update peers (which include peer_info) if (removed) update_heartbeat_peers(); - pg->check_recovery_sources(osdmap); + + check_recovery_sources(osdmap); } void PeeringState::update_heartbeat_peers() diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 1b202dbef33..b32f6914b7b 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -71,6 +71,7 @@ public: virtual void send_cluster_message(int osd, Message *m, epoch_t epoch) = 0; + virtual void check_recovery_sources(const OSDMapRef& newmap) = 0; virtual void on_pool_change() = 0; virtual void on_role_change() = 0; virtual void on_change(ObjectStore::Transaction *t) = 0; @@ -1136,6 +1137,8 @@ public: bool deleting = false; /// true while in removing or OSD is shutting down atomic deleted = {false}; /// true once deletion complete + MissingLoc missing_loc; ///< information about missing objects + void update_osdmap_ref(OSDMapRef newmap) { osdmap_ref = std::move(newmap); } @@ -1148,6 +1151,7 @@ public: void remove_down_peer_info(const OSDMapRef &osdmap); void purge_strays(); void update_history(const pg_history_t& new_history); + void check_recovery_sources(const OSDMapRef& map); public: PeeringState( diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 265b7b21c6b..3ff2ae824cf 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -12400,34 +12400,7 @@ void PrimaryLogPG::cancel_pull(const hobject_t &soid) void PrimaryLogPG::check_recovery_sources(const OSDMapRef& osdmap) { - /* - * check that any peers we are planning to (or currently) pulling - * objects from are dealt with. - */ - missing_loc.check_recovery_sources(osdmap); pgbackend->check_recovery_sources(osdmap); - - for (set::iterator i = peer_log_requested.begin(); - i != peer_log_requested.end(); - ) { - if (!osdmap->is_up(i->osd)) { - dout(10) << "peer_log_requested removing " << *i << dendl; - peer_log_requested.erase(i++); - } else { - ++i; - } - } - - for (set::iterator i = peer_missing_requested.begin(); - i != peer_missing_requested.end(); - ) { - if (!osdmap->is_up(i->osd)) { - dout(10) << "peer_missing_requested removing " << *i << dendl; - peer_missing_requested.erase(i++); - } else { - ++i; - } - } } bool PrimaryLogPG::start_recovery_ops( -- 2.39.5