We have been using PeeringCtx (previously RecoveryCtx) to batch up
query, notify, and info messages and send them to other OSDs. This is
optimizing for small clusters in a way that doesn't apply to large
clusters and complicates the code.
(FWIW I also don't think the batching was working very well anyway.)
Instead, dispatch everything *inside* the PG lock, and do not accumulate
work across multiple PGs. Avoid re-using the RecoveryCtx at all by
moving it into the loops.