epoch_t e = get_osdmap()->get_epoch();
PGRef pgref(this);
auto delete_requeue_callback = new LambdaContext([this, pgref, e](int r) {
- dout(20) << __func__ << " wake up at "
+ dout(20) << "do_delete_work() [cb] wake up at "
<< ceph_clock_now()
<< ", re-queuing delete" << dendl;
std::scoped_lock locker{*this};
/**
* a special version of PG::scrub(), which:
* - is initiated after repair, and
+ * (not true anymore:)
* - is not required to allocate local/remote OSD scrub resources
*/
void recovery_scrub(epoch_t queued, ThreadPool::TPHandle& handle)
* not required to reserve resources.
* - (for a replica) 'StartReplica' or 'StartReplicaNoWait', triggered by an incoming
* MOSDRepScrub message.
+ *
+ * note (20.8.21): originally, AfterRepairScrub was triggering a scrub without waiting
+ * for replica resources to be acquired. But once replicas started using the
+ * resource-request to identify and tag the scrub session, this bypass cannot be
+ * supported anymore.
*/
struct NotActive : sc::state<NotActive, ScrubMachine> {
explicit NotActive(my_context ctx);
using reactions = mpl::list<sc::transition<StartScrub, ReservingReplicas>,
// a scrubbing that was initiated at recovery completion,
// and requires no resource reservations:
- sc::transition<AfterRepairScrub, ActiveScrubbing>,
+ sc::transition<AfterRepairScrub, ReservingReplicas>,
sc::transition<StartReplica, ReplicaWaitUpdates>,
sc::transition<StartReplicaNoWait, ActiveReplica>>;
};