From: Samuel Just Date: Wed, 19 Dec 2012 18:33:40 +0000 (-0800) Subject: OSDMonitor: remove temp pg mappings with no up pgs X-Git-Tag: v0.56~43^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6122a9f62f9eeae1410d1703fecb8939a35fb03f;p=ceph.git OSDMonitor: remove temp pg mappings with no up pgs Otherwise, the pg won't be validly mapped until one of the temp pgs comes back up. Signed-off-by: Samuel Just --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 5c8b08e43a20..7522bc133adb 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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 >::iterator p = tmpmap.pg_temp->begin(); + p != tmpmap.pg_temp->end(); + p++) { + unsigned num_up = 0; + for (vector::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(); } diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 4faa90e29021..9529f731c84e 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -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);