@@ -407,7 +407,34 @@ BackfillState::PrimaryScanning::react(PrimaryScanned evt)
407407 LOG_PREFIX (BackfillState::PrimaryScanning::react::PrimaryScanned);
408408 DEBUGDPP (" " , pg ());
409409 backfill_state ().backfill_info = std::move (evt.result );
410- return transit<Enqueuing>();
410+ if (!backfill_state ().is_suspended ()) {
411+ return transit<Enqueuing>();
412+ } else {
413+ DEBUGDPP (" backfill suspended, not going Enqueuing" , pg ());
414+ backfill_state ().go_enqueuing_on_resume ();
415+ }
416+ return discard_event ();
417+ }
418+
419+ boost::statechart::result
420+ BackfillState::PrimaryScanning::react (CancelBackfill evt)
421+ {
422+ LOG_PREFIX (BackfillState::PrimaryScanning::react::SuspendBackfill);
423+ DEBUGDPP (" suspended within PrimaryScanning" , pg ());
424+ backfill_state ().on_suspended ();
425+ return discard_event ();
426+ }
427+
428+ boost::statechart::result
429+ BackfillState::PrimaryScanning::react (Triggered evt)
430+ {
431+ LOG_PREFIX (BackfillState::PrimaryScanning::react::Triggered);
432+ ceph_assert (backfill_state ().is_suspended ());
433+ if (backfill_state ().on_resumed ()) {
434+ DEBUGDPP (" Backfill resumed, going Enqueuing" , pg ());
435+ return transit<Enqueuing>();
436+ }
437+ return discard_event ();
411438}
412439
413440boost::statechart::result
@@ -470,21 +497,40 @@ BackfillState::ReplicasScanning::react(ReplicaScanned evt)
470497 if (waiting_on_backfill.empty ()) {
471498 ceph_assert (backfill_state ().peer_backfill_info .size () == \
472499 peering_state ().get_backfill_targets ().size ());
473- return transit<Enqueuing>();
500+ if (!backfill_state ().is_suspended ()) {
501+ return transit<Enqueuing>();
502+ } else {
503+ DEBUGDPP (" backfill suspended, not going Enqueuing" , pg ());
504+ backfill_state ().go_enqueuing_on_resume ();
505+ }
474506 }
475507 } else {
476- // we canceled backfill for a while due to a too full, and this
508+ // we suspended backfill for a while due to a too full, and this
477509 // is an extra response from a non-too-full peer
478- DEBUGDPP (" canceled backfill (too full?)" , pg ());
510+ DEBUGDPP (" suspended backfill (too full?)" , pg ());
479511 }
480512 return discard_event ();
481513}
482514
483515boost::statechart::result
484516BackfillState::ReplicasScanning::react (CancelBackfill evt)
485517{
486- LOG_PREFIX (BackfillState::ReplicasScanning::react::CancelBackfill);
487- DEBUGDPP (" cancelled within ReplicasScanning" , pg ());
518+ LOG_PREFIX (BackfillState::ReplicasScanning::react::SuspendBackfill);
519+ DEBUGDPP (" suspended within ReplicasScanning" , pg ());
520+ backfill_state ().on_suspended ();
521+ return discard_event ();
522+ }
523+
524+ boost::statechart::result
525+ BackfillState::ReplicasScanning::react (Triggered evt)
526+ {
527+ LOG_PREFIX (BackfillState::ReplicasScanning::react::Triggered);
528+ ceph_assert (backfill_state ().is_suspended ());
529+ if (backfill_state ().on_resumed ()) {
530+ DEBUGDPP (" Backfill resumed, going Enqueuing" , pg ());
531+ return transit<Enqueuing>();
532+ }
533+ return discard_event ();
488534}
489535
490536boost::statechart::result
@@ -510,7 +556,34 @@ BackfillState::Waiting::react(ObjectPushed evt)
510556 LOG_PREFIX (BackfillState::Waiting::react::ObjectPushed);
511557 DEBUGDPP (" Waiting::react() on ObjectPushed; evt.object={}" , pg (), evt.object );
512558 backfill_state ().progress_tracker ->complete_to (evt.object , evt.stat , false );
513- return transit<Enqueuing>();
559+ if (!backfill_state ().is_suspended ()) {
560+ return transit<Enqueuing>();
561+ } else {
562+ DEBUGDPP (" backfill suspended, not going Enqueuing" , pg ());
563+ backfill_state ().go_enqueuing_on_resume ();
564+ }
565+ return discard_event ();
566+ }
567+
568+ boost::statechart::result
569+ BackfillState::Waiting::react (CancelBackfill evt)
570+ {
571+ LOG_PREFIX (BackfillState::Waiting::react::SuspendBackfill);
572+ DEBUGDPP (" suspended within Waiting" , pg ());
573+ backfill_state ().on_suspended ();
574+ return discard_event ();
575+ }
576+
577+ boost::statechart::result
578+ BackfillState::Waiting::react (Triggered evt)
579+ {
580+ LOG_PREFIX (BackfillState::Waiting::react::Triggered);
581+ ceph_assert (backfill_state ().is_suspended ());
582+ if (backfill_state ().on_resumed ()) {
583+ DEBUGDPP (" Backfill resumed, going Enqueuing" , pg ());
584+ return transit<Enqueuing>();
585+ }
586+ return discard_event ();
514587}
515588
516589// -- Done
0 commit comments