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>
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();