diff options
author | Sage Weil <sage@newdream.net> | 2012-04-26 11:01:06 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2012-04-26 18:49:19 -0700 |
commit | ed1024fb15729651a987ccf3fe9d1ecf91cae164 (patch) | |
tree | 5f4aa146da3d0cf164d7833f7470639eedb0b583 | |
parent | 207eec65d5959a5ce1591f2bf5897dc5496b2d3e (diff) | |
download | ceph-ed1024fb15729651a987ccf3fe9d1ecf91cae164.tar.gz |
osdmap: use shared_ptr<> for pg_temp
This will let us dedup later.
Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r-- | src/mon/OSDMonitor.cc | 16 | ||||
-rw-r--r-- | src/osd/OSDMap.cc | 30 | ||||
-rw-r--r-- | src/osd/OSDMap.h | 3 |
3 files changed, 25 insertions, 24 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 08e5e0d88e3..2d22d31dffd 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -249,8 +249,8 @@ void OSDMonitor::remove_redundant_pg_temp() { dout(10) << "remove_redundant_pg_temp" << dendl; - for (map<pg_t,vector<int> >::iterator p = osdmap.pg_temp.begin(); - p != osdmap.pg_temp.end(); + for (map<pg_t,vector<int> >::iterator p = osdmap.pg_temp->begin(); + p != osdmap.pg_temp->end(); p++) { if (pending_inc.new_pg_temp.count(p->first) == 0) { vector<int> raw_up; @@ -934,14 +934,14 @@ bool OSDMonitor::preprocess_pgtemp(MOSDPGTemp *m) for (map<pg_t,vector<int> >::iterator p = m->pg_temp.begin(); p != m->pg_temp.end(); p++) { dout(20) << " " << p->first - << (osdmap.pg_temp.count(p->first) ? osdmap.pg_temp[p->first] : empty) + << (osdmap.pg_temp->count(p->first) ? (*osdmap.pg_temp)[p->first] : empty) << " -> " << p->second << dendl; // removal? - if (p->second.empty() && osdmap.pg_temp.count(p->first)) + if (p->second.empty() && osdmap.pg_temp->count(p->first)) return false; // change? - if (p->second.size() && (osdmap.pg_temp.count(p->first) == 0 || - osdmap.pg_temp[p->first] != p->second)) + if (p->second.size() && (osdmap.pg_temp->count(p->first) == 0 || + (*osdmap.pg_temp)[p->first] != p->second)) return false; } @@ -2571,8 +2571,8 @@ int OSDMonitor::_prepare_remove_pool(uint64_t pool) pending_inc.old_pools.insert(pool); // remove any pg_temp mappings for this pool too - for (map<pg_t,vector<int32_t> >::iterator p = osdmap.pg_temp.begin(); - p != osdmap.pg_temp.end(); + for (map<pg_t,vector<int32_t> >::iterator p = osdmap.pg_temp->begin(); + p != osdmap.pg_temp->end(); ++p) if (p->first.pool() == pool) { dout(10) << "_prepare_remove_pool " << pool << " removing obsolete pg_temp " diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 767fd868c59..fd05ce96e21 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -707,9 +707,9 @@ int OSDMap::apply_incremental(Incremental &inc) // pg rebuild for (map<pg_t, vector<int> >::iterator p = inc.new_pg_temp.begin(); p != inc.new_pg_temp.end(); p++) { if (p->second.empty()) - pg_temp.erase(p->first); + pg_temp->erase(p->first); else - pg_temp[p->first] = p->second; + (*pg_temp)[p->first] = p->second; } // blacklist @@ -810,8 +810,8 @@ void OSDMap::_raw_to_up_osds(pg_t pg, vector<int>& raw, vector<int>& up) const bool OSDMap::_raw_to_temp_osds(const pg_pool_t& pool, pg_t pg, vector<int>& raw, vector<int>& temp) const { pg = pool.raw_pg_to_pg(pg); - map<pg_t,vector<int> >::const_iterator p = pg_temp.find(pg); - if (p != pg_temp.end()) { + map<pg_t,vector<int> >::const_iterator p = pg_temp->find(pg); + if (p != pg_temp->end()) { temp.clear(); for (unsigned i=0; i<p->second.size(); i++) { if (!exists(p->second[i]) || is_down(p->second[i])) @@ -927,10 +927,10 @@ void OSDMap::encode_client_old(bufferlist& bl) const ::encode(osd_addrs->client_addr, bl); // for ::encode(pg_temp, bl); - n = pg_temp.size(); + n = pg_temp->size(); ::encode(n, bl); - for (map<pg_t,vector<int32_t> >::const_iterator p = pg_temp.begin(); - p != pg_temp.end(); + for (map<pg_t,vector<int32_t> >::const_iterator p = pg_temp->begin(); + p != pg_temp->end(); ++p) { old_pg_t opg = p->first.get_old_pg(); ::encode(opg, bl); @@ -970,7 +970,7 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const ::encode(osd_weight, bl); ::encode(osd_addrs->client_addr, bl); - ::encode(pg_temp, bl); + ::encode(*pg_temp, bl); // crush bufferlist cbl; @@ -1048,15 +1048,15 @@ void OSDMap::decode(bufferlist::iterator& p) ::decode(osd_weight, p); ::decode(osd_addrs->client_addr, p); if (v <= 5) { - pg_temp.clear(); + pg_temp->clear(); ::decode(n, p); while (n--) { old_pg_t opg; ::decode_raw(opg, p); - ::decode(pg_temp[pg_t(opg)], p); + ::decode((*pg_temp)[pg_t(opg)], p); } } else { - ::decode(pg_temp, p); + ::decode(*pg_temp, p); } // crush @@ -1148,8 +1148,8 @@ void OSDMap::dump(Formatter *f) const f->close_section(); f->open_array_section("pg_temp"); - for (map<pg_t,vector<int> >::const_iterator p = pg_temp.begin(); - p != pg_temp.end(); + for (map<pg_t,vector<int> >::const_iterator p = pg_temp->begin(); + p != pg_temp->end(); p++) { f->open_array_section("osds"); for (vector<int>::const_iterator q = p->second.begin(); q != p->second.end(); ++q) @@ -1267,8 +1267,8 @@ void OSDMap::print(ostream& out) const } out << std::endl; - for (map<pg_t,vector<int> >::const_iterator p = pg_temp.begin(); - p != pg_temp.end(); + for (map<pg_t,vector<int> >::const_iterator p = pg_temp->begin(); + p != pg_temp->end(); p++) out << "pg_temp " << p->first << " " << p->second << "\n"; diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 66cc543f533..a7a5cc2572d 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -165,7 +165,7 @@ private: vector<__u32> osd_weight; // 16.16 fixed point, 0x10000 = "in", 0 = "out" vector<osd_info_t> osd_info; - map<pg_t,vector<int> > pg_temp; // temp pg mapping (e.g. while we rebuild) + std::tr1::shared_ptr< map<pg_t,vector<int> > > pg_temp; // temp pg mapping (e.g. while we rebuild) map<int64_t,pg_pool_t> pools; map<int64_t,string> pool_name; @@ -189,6 +189,7 @@ private: flags(0), num_osd(0), max_osd(0), osd_addrs(new addrs_s), + pg_temp(new map<pg_t,vector<int> >), cluster_snapshot_epoch(0), crush(new CrushWrapper) { memset(&fsid, 0, sizeof(fsid)); |