From 2a22ff438546c77760e70b9aa9bec85693c604a9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 25 Apr 2012 13:25:30 -0700 Subject: [PATCH] mon: thrash pg_temp mapping, too Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index e6fb65f3f0751..2841880bffe3e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -196,6 +196,34 @@ bool OSDMonitor::thrash() dout(5) << "thrash_map osd." << o << " out" << dendl; pending_inc.new_weight[o] = CEPH_OSD_OUT; } + + // generate some pg_temp entries. + // let's assume the hash_map iterates in a random-ish order. + int n = rand() % mon->pgmon()->pg_map.pg_stat.size(); + hash_map::iterator p = mon->pgmon()->pg_map.pg_stat.begin(); + hash_map::iterator e = mon->pgmon()->pg_map.pg_stat.end(); + while (n--) + p++; + for (int i=0; i<50; i++) { + vector v; + for (int j=0; j<3; j++) { + o = rand() % osdmap.get_num_osds(); + if (osdmap.exists(o) && std::find(v.begin(), v.end(), o) == v.end()) + v.push_back(o); + } + if (v.size() < 3) { + for (vector::iterator q = p->second.acting.begin(); q != p->second.acting.end(); q++) + if (std::find(v.begin(), v.end(), *q) == v.end()) + v.push_back(*q); + } + if (v.size()) + pending_inc.new_pg_temp[p->first] = v; + dout(5) << "thrash_map pg " << p->first << " pg_temp remapped to " << v << dendl; + + p++; + if (p == e) + p = mon->pgmon()->pg_map.pg_stat.begin(); + } return true; } -- 2.39.5