]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD::activate_map: don't publish map until pgs in deleted pools have been removed
authorSamuel Just <sam.just@inktank.com>
Tue, 3 Jul 2012 05:09:31 +0000 (22:09 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 5 Jul 2012 17:15:02 +0000 (10:15 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index e4e9b1f1bbbe8e877b31825deeab800dd9981a08..388fd2aaa86ebfed523561af08101231dd1dc67f 100644 (file)
@@ -3356,7 +3356,6 @@ void OSD::handle_osd_map(MOSDMap *m)
        note_down_osd(*p);
     
     osdmap = newmap;
-    service.publish_map(newmap);
 
     superblock.current_epoch = cur;
     advance_map(t, fin);
@@ -3601,15 +3600,10 @@ void OSD::activate_map()
       //pool is deleted!
       pg->get();
       to_remove.push_back(pg);
-      pg->unlock();
-      continue;
-    } else {
-      pg->queue_null(osdmap->get_epoch(), osdmap->get_epoch());
     }
     pg->unlock();
-  }  
+  }
 
-  
   for (list<PG*>::iterator i = to_remove.begin();
        i != to_remove.end();
        ++i) {
@@ -3618,7 +3612,21 @@ void OSD::activate_map()
     (*i)->unlock();
     (*i)->put();
   }
+  to_remove.clear();
+
+  service.publish_map(osdmap);
+
+  // scan pg's
+  for (hash_map<pg_t,PG*>::iterator it = pg_map.begin();
+       it != pg_map.end();
+       it++) {
+    PG *pg = it->second;
+    pg->lock();
+    pg->queue_null(osdmap->get_epoch(), osdmap->get_epoch());
+    pg->unlock();
+  }
 
+  
   logger->set(l_osd_pg, pg_map.size());
   logger->set(l_osd_pg_primary, num_pg_primary);
   logger->set(l_osd_pg_replica, num_pg_replica);