From: Sage Weil Date: Tue, 30 Nov 2010 19:43:19 +0000 (-0800) Subject: osd: make recovery_oids debug list per-pg X-Git-Tag: v0.23.2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1b06332de69b332092d115451efbd29afec79269;p=ceph.git osd: make recovery_oids debug list per-pg Otherwise we hit bad asserts if an object of the same name in different pools is getting recovered simultaneously. Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 797916d9cf17..4390e35bca8f 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4358,7 +4358,7 @@ void OSD::do_recovery(PG *pg) << " (" << recovery_ops_active << "/" << g_conf.osd_recovery_max_active << " rops) on " << *pg << dendl; #ifdef DEBUG_RECOVERY_OIDS - dout(20) << " active was " << recovery_oids << dendl; + dout(20) << " active was " << recovery_oids[pg->info.pgid] << dendl; #endif int started = pg->start_recovery_ops(max); @@ -4385,10 +4385,9 @@ void OSD::start_recovery_op(PG *pg, const sobject_t& soid) recovery_ops_active++; #ifdef DEBUG_RECOVERY_OIDS - dout(20) << " active was " << recovery_oids << dendl; - assert(recovery_oids.count(soid) == 0); - recovery_oids.insert(soid); - assert((int)recovery_oids.size() == recovery_ops_active); + dout(20) << " active was " << recovery_oids[pg->info.pgid] << dendl; + assert(recovery_oids[pg->info.pgid].count(soid) == 0); + recovery_oids[pg->info.pgid].insert(soid); #endif recovery_wq.unlock(); @@ -4407,10 +4406,9 @@ void OSD::finish_recovery_op(PG *pg, const sobject_t& soid, bool dequeue) assert(recovery_ops_active >= 0); #ifdef DEBUG_RECOVERY_OIDS - dout(20) << " active oids was " << recovery_oids << dendl; - assert(recovery_oids.count(soid)); - recovery_oids.erase(soid); - assert((int)recovery_oids.size() == recovery_ops_active); + dout(20) << " active oids was " << recovery_oids[pg->info.pgid] << dendl; + assert(recovery_oids[pg->info.pgid].count(soid)); + recovery_oids[pg->info.pgid].erase(soid); #endif if (dequeue) diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 6cfbaac0288e..0fb6cd385221 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -694,7 +694,7 @@ protected: utime_t defer_recovery_until; int recovery_ops_active; #ifdef DEBUG_RECOVERY_OIDS - set recovery_oids; + map > recovery_oids; #endif struct RecoveryWQ : public ThreadPool::WorkQueue {