]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMonitor: remove temp pg mappings with no up pgs
authorSamuel Just <sam.just@inktank.com>
Wed, 19 Dec 2012 18:33:40 +0000 (10:33 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 19 Dec 2012 18:33:40 +0000 (10:33 -0800)
Otherwise, the pg won't be validly mapped until one of the temp
pgs comes back up.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 5c8b08e43a20b3116e171057d231ec0575ef2d3d..7522bc133adb0d3c250ff8853651bdb5abee9106 100644 (file)
@@ -302,6 +302,27 @@ void OSDMonitor::remove_redundant_pg_temp()
   }
 }
 
+void OSDMonitor::remove_down_pg_temp()
+{
+  dout(10) << "remove_down_pg_temp" << dendl;
+  OSDMap tmpmap(osdmap);
+  tmpmap.apply_incremental(pending_inc);
+
+  for (map<pg_t,vector<int> >::iterator p = tmpmap.pg_temp->begin();
+       p != tmpmap.pg_temp->end();
+       p++) {
+    unsigned num_up = 0;
+    for (vector<int>::iterator i = p->second.begin();
+        i != p->second.end();
+        ++i) {
+      if (!tmpmap.is_down(*i))
+       ++num_up;
+    }
+    if (num_up == 0)
+      pending_inc.new_pg_temp[p->first].clear();
+  }
+}
+
 /* Assign a lower weight to overloaded OSDs.
  *
  * The osds that will get a lower weight are those with with a utilization
@@ -391,6 +412,9 @@ void OSDMonitor::create_pending()
 
   // drop any redundant pg_temp entries
   remove_redundant_pg_temp();
+
+  // drop any pg_temp entries with no up entries
+  remove_down_pg_temp();
 }
 
 
index 4faa90e2902141c39fa4eec1f4c62303e3193b4d..9529f731c84e7f52374110d504a8f3bec2f9eaa8 100644 (file)
@@ -165,6 +165,7 @@ private:
   void send_incremental(epoch_t first, entity_inst_t& dest, bool onetime);
 
   void remove_redundant_pg_temp();
+  void remove_down_pg_temp();
   int reweight_by_utilization(int oload, std::string& out_str);
  
   bool preprocess_failure(class MOSDFailure *m);