]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix PGMap::generate_test_instances()
authorSage Weil <sage@newdream.net>
Tue, 7 Feb 2012 17:16:54 +0000 (09:16 -0800)
committerSage Weil <sage@newdream.net>
Wed, 8 Feb 2012 21:12:18 +0000 (13:12 -0800)
Apply an incremental instead of futzing directly with members.

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

index bd9e4813929479d17abe9856240605207b85089d..379a6e78a89107dabea015eca4c30935409ecee3 100644 (file)
@@ -104,13 +104,21 @@ void PGMap::Incremental::generate_test_instances(list<PGMap::Incremental*>& o)
 {
   o.push_back(new Incremental);
   o.push_back(new Incremental);
-  o.back()->version = 12;
+  o.back()->version = 1;
+  o.push_back(new Incremental);
+  o.back()->version = 2;
+  o.back()->pg_stat_updates[pg_t(1,2,3)] = pg_stat_t();
+  o.back()->osd_stat_updates[5] = osd_stat_t();
+  o.push_back(new Incremental);
+  o.back()->version = 3;
   o.back()->osdmap_epoch = 1;
   o.back()->pg_scan = 2;
   o.back()->full_ratio = .2;
   o.back()->nearfull_ratio = .3;
-  o.back()->pg_stat_updates[pg_t(1,2,3)] = pg_stat_t();
-  o.back()->osd_stat_updates[5] = osd_stat_t();  
+  o.back()->pg_stat_updates[pg_t(4,5,6)] = pg_stat_t();
+  o.back()->osd_stat_updates[6] = osd_stat_t();
+  o.back()->pg_remove.insert(pg_t(1,2,3));
+  o.back()->osd_stat_rm.insert(5);
 }
 
 
@@ -260,7 +268,12 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s)
   num_pg--;
   if (--num_pg_by_state[s.state] == 0)
     num_pg_by_state.erase(s.state);
-  pg_pool_sum[pgid.pool()].sub(s);
+
+  pool_stat_t& ps = pg_pool_sum[pgid.pool()];
+  ps.sub(s);
+  if (ps.is_zero())
+    pg_pool_sum.erase(pgid.pool());
+
   pg_sum.sub(s);
   if (s.state & PG_STATE_CREATING)
     creating_pgs.erase(pgid);
@@ -524,11 +537,12 @@ void PGMap::generate_test_instances(list<PGMap*>& o)
 {
   o.push_back(new PGMap);
   o.push_back(new PGMap);
-  o.back()->version = 888;
-  o.back()->last_osdmap_epoch = 12;
-  o.back()->last_pg_scan = 34;
-  o.back()->full_osds.insert(3);
-  o.back()->nearfull_osds.insert(4);
-  o.back()->pg_stat[pg_t(1,2,3)] = pg_stat_t();  
-  o.back()->osd_stat[5] = osd_stat_t();  
+  list<Incremental*> inc;
+  Incremental::generate_test_instances(inc);
+  inc.pop_front();
+  while (!inc.empty()) {
+    o.back()->apply_incremental(*inc.front());
+    delete inc.front();
+    inc.pop_front();
+  }
 }
index 47fefc0d1253e56731e3adafea8a2d83b8758d69..0431715ac533dc121f0801119d7a50341cf546ae 100644 (file)
@@ -38,6 +38,8 @@ public:
   hash_map<int,osd_stat_t> osd_stat;
   set<int> full_osds;
   set<int> nearfull_osds;
+  float full_ratio;
+  float nearfull_ratio;
 
   class Incremental {
   public:
@@ -61,23 +63,22 @@ public:
   };
 
 
-  // aggregate stats (soft state)
+  // aggregate stats (soft state), generated by calc_stats()
   hash_map<int,int> num_pg_by_state;
   int64_t num_pg, num_osd;
   hash_map<int,pool_stat_t> pg_pool_sum;
   pool_stat_t pg_sum;
   osd_stat_t osd_sum;
 
-  float full_ratio;
-  float nearfull_ratio;
-
   set<pg_t> creating_pgs;   // lru: front = new additions, back = recently pinged
   
-  PGMap() : version(0),
-           last_osdmap_epoch(0), last_pg_scan(0),
-           num_pg(0),
-           num_osd(0),
-           full_ratio(.8), nearfull_ratio(.9) {}
+  PGMap()
+    : version(0),
+      last_osdmap_epoch(0), last_pg_scan(0),
+      full_ratio(.8), nearfull_ratio(.9),
+      num_pg(0),
+      num_osd(0)
+  {}
 
   void apply_incremental(const Incremental& inc);
   void redo_full_sets();