mirror of
https://github.com/ceph/ceph
synced 2024-12-17 17:05:42 +00:00
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 <sam.just@inktank.com>
This commit is contained in:
parent
2395af9f7a
commit
6122a9f62f
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user