]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: Add probe set to HB peers during GetInfo
authorSamuel Just <samuel.just@dreamhost.com>
Tue, 1 May 2012 00:31:09 +0000 (17:31 -0700)
committerSamuel Just <samuel.just@dreamhost.com>
Tue, 1 May 2012 20:12:05 +0000 (13:12 -0700)
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index d7a6f228492000a1f53bede78d87f8480327cac6..623680969ca9d06f87c1e2dcb86c50fd6c7b63b0 100644 (file)
@@ -1485,6 +1485,11 @@ void OSD::maybe_update_heartbeat_peers()
         ++p)
       if (osdmap->is_up(*p))
        _add_heartbeat_peer(*p);
+    for (set<int>::iterator p = pg->probe_targets.begin();
+        p != pg->probe_targets.end();
+        ++p)
+      if (osdmap->is_up(*p))
+       _add_heartbeat_peer(*p);
     pg->heartbeat_peer_lock.Unlock();
   }
 
index 3efacf46faf882829d35d474a43ea4263d07ef08..b146c5cfe3732753cd7c5a3a829cdbe567a06a21 100644 (file)
@@ -881,6 +881,7 @@ void PG::build_prior(std::auto_ptr<PriorSet> &prior_set)
             << ", all is well" << dendl;
     need_up_thru = false;
   }
+  set_probe_targets(prior_set->probe);
 }
 
 void PG::clear_primary_state()
@@ -1705,6 +1706,18 @@ void PG::purge_strays()
   peer_missing_requested.clear();
 }
 
+void PG::set_probe_targets(const set<int> &probe_set)
+{
+  Mutex::Locker l(heartbeat_peer_lock);
+  probe_targets = probe_set;
+}
+
+void PG::clear_probe_targets()
+{
+  Mutex::Locker l(heartbeat_peer_lock);
+  probe_targets.clear();
+}
+
 void PG::update_heartbeat_peers()
 {
   assert(is_locked());
@@ -4024,6 +4037,7 @@ void PG::RecoveryState::Peering::exit()
   context< RecoveryMachine >().log_exit(state_name, enter_time);
   PG *pg = context< RecoveryMachine >().pg;
   pg->state_clear(PG_STATE_PEERING);
+  pg->clear_probe_targets();
 }
 
 /*---------Active---------*/
index 39508d787a24815730f5afea794b5a64aee7be78..027e386dfdef92d3ab49da7e704d705fad517ad3 100644 (file)
@@ -523,9 +523,12 @@ protected:
 
 
   /* heartbeat peers */
+  void set_probe_targets(const set<int> &probe_set);
+  void clear_probe_targets();
 public:
   Mutex heartbeat_peer_lock;
   set<int> heartbeat_peers;
+  set<int> probe_targets;
 
 protected:
   /**