]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: do not queue scrub if PG is not active when unblock 29372/head
authorSage Weil <sage@redhat.com>
Wed, 19 Jun 2019 19:20:32 +0000 (14:20 -0500)
committerPrashant D <pdhange@redhat.com>
Sun, 28 Jul 2019 23:47:17 +0000 (19:47 -0400)
- we are scrubbing
- we block scrub on an object
- we have an interval reset on epoch X
- we unblock and queue scrub in epoch X
- we finish the reset (we are no longer scrubbing)
- we process the PGScrub on epoch X, it is still epoch X, and we are not
  scrubbing
  -> assert

Fix by not queueing scrub if we are unblocking and the PG is no longer
active (because we are mid-way through the peering reset).

Fixes: http://tracker.ceph.com/issues/40451
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 7a3227e946332c0bdc983201fe4a4e83cfe6fda6)

src/osd/PrimaryLogPG.cc

index 18b9e2539abe6b228d5928c1b1174b29837b69aa..7db909d75300644dfcde07216a1d3afadde8b218 100644 (file)
@@ -11388,7 +11388,11 @@ void PrimaryLogPG::kick_object_context_blocked(ObjectContextRef obc)
 
   if (obc->requeue_scrub_on_unblock) {
     obc->requeue_scrub_on_unblock = false;
-    requeue_scrub();
+    // only requeue if we are still active: we may be unblocking
+    // because we are resetting for a new peering interval
+    if (is_active()) {
+      requeue_scrub();
+    }
   }
 }