]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: use shared_ptr<> for pg_temp
authorSage Weil <sage@newdream.net>
Thu, 26 Apr 2012 18:01:06 +0000 (11:01 -0700)
committerSage Weil <sage@newdream.net>
Fri, 27 Apr 2012 01:49:19 +0000 (18:49 -0700)
This will let us dedup later.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h

index 08e5e0d88e35bc314deb5352bcc728adab94d26c..2d22d31dffdcec71873172f83130261d4ddfa9af 100644 (file)
@@ -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 "
index 767fd868c59573f7f4dde00613861669e5706294..fd05ce96e21f4dc4dddce82ad330adbb507d6b50 100644 (file)
@@ -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";
 
index 66cc543f533957f2a13b349c14e98cae81a35056..a7a5cc2572d55338b8337123db80ea1bc578b07b 100644 (file)
@@ -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));