]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/: move check_recovery_sources and missing_loc into PeeringState
authorSamuel Just <sjust@redhat.com>
Wed, 27 Mar 2019 00:38:36 +0000 (17:38 -0700)
committersjust@redhat.com <sjust@redhat.com>
Wed, 1 May 2019 18:22:13 +0000 (11:22 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/osd/PG.cc
src/osd/PG.h
src/osd/PeeringState.cc
src/osd/PeeringState.h
src/osd/PrimaryLogPG.cc

index 728e9fbda02f938f6a0028ac9326912f048c2a7a..1c9ee2c5beb64824f118d81f89f03cb70cdf0670 100644 (file)
@@ -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),
index 069cf1689360e7d038fe760585ef404eb32c3f7f..b1c4c16416284d3de74768e6e3bd7a1cd4ef3c7d 100644 (file)
@@ -226,6 +226,7 @@ protected:
   set<pg_shard_t> &might_have_unfound;
   bool &deleting;
   atomic<bool> &deleted;
+  MissingLoc &missing_loc;
 
 public:
   // -- members --
@@ -594,10 +595,6 @@ protected:
   ghobject_t    pgmeta_oid;
 
   // ------------------
-  // MissingLoc
-
-  MissingLoc missing_loc;
-  
   interval_set<snapid_t> 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);
 
index 68aadddec47a292569628c4e70ee06c0939e1cbc..694aebae1599c0103c9437afa1cc503d2bc5a1c5 100644 (file)
@@ -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<pg_shard_t>::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<pg_shard_t>::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()
index 1b202dbef33b0525fb75e17946fae9ddfe947f56..b32f6914b7b9971c934ee3296eeb815d7c44dc68 100644 (file)
@@ -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<bool> 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(
index 265b7b21c6b3cb15b2736d870c221833c862a943..3ff2ae824cfe8bdda1702ed1c6e5cb732517ff87 100644 (file)
@@ -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<pg_shard_t>::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<pg_shard_t>::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(