From: Samuel Just Date: Tue, 3 Jul 2012 05:09:31 +0000 (-0700) Subject: OSD::activate_map: don't publish map until pgs in deleted pools have been removed X-Git-Tag: v0.50~109^2~2^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31db8ed08d042a80bd0fa5172700424a7ee4adaf;p=ceph.git OSD::activate_map: don't publish map until pgs in deleted pools have been removed Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e4e9b1f1bbbe..388fd2aaa86e 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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::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::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);