]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PGMap: add redo_full_sets() function for when ratios change.
authorGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 19 Apr 2011 22:02:58 +0000 (15:02 -0700)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 19 Apr 2011 22:02:58 +0000 (15:02 -0700)
Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/mon/PGMap.h

index 94a12a1073936867021c8ef559f4bd7f006eaa02..e05e048368be1be20e660a2b864ad4c8d49cbbb1 100644 (file)
@@ -84,10 +84,17 @@ public:
   void apply_incremental(const Incremental& inc) {
     assert(inc.version == version+1);
     version++;
-    if (inc.full_ratio != 0)
+    bool ratios_changed = false;
+    if (inc.full_ratio != 0) {
       full_ratio = inc.full_ratio;
-    if (inc.nearfull_ratio != 0)
+      ratios_changed = true;
+    }
+    if (inc.nearfull_ratio != 0) {
       nearfull_ratio = inc.nearfull_ratio;
+      ratios_changed = true;
+    }
+    if (ratios_changed)
+      redo_full_sets();
     for (map<pg_t,pg_stat_t>::const_iterator p = inc.pg_stat_updates.begin();
         p != inc.pg_stat_updates.end();
         ++p) {
@@ -177,6 +184,20 @@ public:
 
   set<pg_t> creating_pgs;   // lru: front = new additions, back = recently pinged
   
+  void redo_full_sets() {
+    full_osds.clear();
+    nearfull_osds.clear();
+    for (hash_map<int, osd_stat_t>::iterator i = osd_stat.begin();
+        i != osd_stat.end();
+        ++i) {
+      float ratio = ((float)i->second.kb_used) / ((float)i->second.kb);
+      if ( ratio > full_ratio )
+        full_osds.insert(i->first);
+      else if ( ratio > nearfull_ratio )
+        nearfull_osds.insert(i->first);
+    }
+  }
+
   void stat_zero() {
     num_pg = 0;
     num_pg_by_state.clear();