]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: requeue PG when we skip handling a peering event
authorSage Weil <sage@redhat.com>
Thu, 8 Jan 2015 19:17:03 +0000 (11:17 -0800)
committerSage Weil <sage@redhat.com>
Fri, 9 Jan 2015 23:05:29 +0000 (15:05 -0800)
If we don't handle the event, we need to put the PG back into the peering
queue or else the event won't get processed until the next event is
queued, at which point we'll be processing events with a delay.

The queue_null is not necessary (and is a waste of effort) because the
event is still in pg->peering_queue and the PG is queued.

This is a firefly-specific patch; a (very) similar one will appear in master
in 492ccc900c3358f36b6b14a207beec071eb06707.

Backport: giant, firefly
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc

index 586b7d707b6447b2bf96524b68be11c54abc4123..77ed17aed027cbcbf78136719c3af221b7587203 100644 (file)
@@ -7858,7 +7858,9 @@ void OSD::process_peering_events(
       continue;
     }
     if (!advance_pg(curmap->get_epoch(), pg, handle, &rctx, &split_pgs)) {
-      pg->queue_null(curmap->get_epoch(), curmap->get_epoch());
+      // we need to requeue the PG explicitly since we didn't actually
+      // handle an event
+      peering_wq.queue(pg);
     } else if (!pg->peering_queue.empty()) {
       PG::CephPeeringEvtRef evt = pg->peering_queue.front();
       pg->peering_queue.pop_front();