]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: make recovery_oids debug list per-pg
authorSage Weil <sage@newdream.net>
Tue, 30 Nov 2010 19:43:19 +0000 (11:43 -0800)
committerSage Weil <sage@newdream.net>
Tue, 30 Nov 2010 19:43:19 +0000 (11:43 -0800)
Otherwise we hit bad asserts if an object of the same name in different
pools is getting recovered simultaneously.

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

index 797916d9cf17e2aeb5d6f2c6378a7994d178757c..4390e35bca8f627e5722a60520f0730c343fcc56 100644 (file)
@@ -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)
index 6cfbaac0288e39508421774e23076b00d2f2a9fb..0fb6cd38522162b5e396e35ea6c0c7c6e7d8469c 100644 (file)
@@ -694,7 +694,7 @@ protected:
   utime_t defer_recovery_until;
   int recovery_ops_active;
 #ifdef DEBUG_RECOVERY_OIDS
-  set<sobject_t> recovery_oids;
+  map<pg_t, set<sobject_t> > recovery_oids;
 #endif
 
   struct RecoveryWQ : public ThreadPool::WorkQueue<PG> {