void PrimaryLogPG::snap_trimmer_scrub_complete()
{
- if (is_primary() && is_active() && is_clean()) {
- ceph_assert(!snap_trimq.empty());
+ if (is_primary() && is_active() && is_clean() && !snap_trimq.empty()) {
+ dout(10) << "scrub finished - requeuing snap_trimmer" << dendl;
snap_trimmer_machine.process_event(ScrubComplete());
}
}
m_fsm->my_states();
m_fsm->process_event(StartScrub{});
dout(10) << "scrubber event --<< StartScrub" << dendl;
+ } else {
+ // and just in case snap trimming was blocked by the aborted scrub
+ m_pg->snap_trimmer_scrub_complete();
}
}
m_fsm->my_states();
m_fsm->process_event(AfterRepairScrub{});
dout(10) << "scrubber event --<< AfterRepairScrub" << dendl;
+ } else {
+ m_pg->snap_trimmer_scrub_complete();
}
}
-
void PgScrubber::send_scrub_unblock(epoch_t epoch_queued)
{
dout(10) << "scrubber event -->> " << __func__ << " epoch: " << epoch_queued << dendl;
&t);
int tr = m_osds->store->queue_transaction(m_pg->ch, std::move(t), nullptr);
ceph_assert(tr == 0);
-
- if (!m_pg->snap_trimq.empty()) {
- dout(10) << "scrub finished, requeuing snap_trimmer" << dendl;
- m_pg->snap_trimmer_scrub_complete();
- }
}
if (has_error) {
if (m_pg->is_active() && m_pg->is_primary()) {
m_pg->recovery_state.share_pg_info();
}
+
+ // we may have blocked the snap trimmer
+ m_pg->snap_trimmer_scrub_complete();
}
void PgScrubber::on_digest_updates()