]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: activate should not enqueue snap_trimmer on a replica
authorSamuel Just <samuelj@hq.newdream.net>
Thu, 13 Jan 2011 20:18:17 +0000 (12:18 -0800)
committerSamuel Just <samuelj@hq.newdream.net>
Thu, 13 Jan 2011 21:16:40 +0000 (13:16 -0800)
Previously, activate would queue_snap_trim() for replicas if snap_trimq
ended up non-empty, guaranteeing a crash for any replica starting up
while purged_snaps lagged behind pool->cached_removed_snaps.

This should fix #702.

Signed-off-by: Samuel Just <samuelj@hq.newdream.net>
src/osd/PG.cc
src/osd/ReplicatedPG.cc

index 2edef858396663796a1e3ff6f9f28d564478e763..203602a85aa9370de08eb2acbd69e25725a09f71 100644 (file)
@@ -1819,11 +1819,13 @@ void PG::activate(ObjectStore::Transaction& t, list<Context*>& tfin,
   clean_up_local(t); 
 
   // initialize snap_trimq
-  snap_trimq = pool->cached_removed_snaps;
-  snap_trimq.subtract(info.purged_snaps);
-  dout(10) << "activate - snap_trimq " << snap_trimq << dendl;
-  if (!snap_trimq.empty())
-    queue_snap_trim();
+  if (is_primary()) {
+    snap_trimq = pool->cached_removed_snaps;
+    snap_trimq.subtract(info.purged_snaps);
+    dout(10) << "activate - snap_trimq " << snap_trimq << dendl;
+    if (!snap_trimq.empty())
+      queue_snap_trim();
+  }
 
   // init complete pointer
   if (missing.num_missing() == 0 &&
index 67161f90eeaadf0af72f19bdecbee9aeb41a2d5c..1d80e4a3109af1d4f594525aedf654b833f9a6a1 100644 (file)
@@ -525,6 +525,7 @@ void ReplicatedPG::do_sub_op_reply(MOSDSubOpReply *r)
 
 bool ReplicatedPG::snap_trimmer()
 {
+  assert(is_primary());
   lock();
   dout(10) << "snap_trimmer start, purged_snaps " << info.purged_snaps << dendl;