Skip to content

Commit bfe15f6

Browse files
committed
crimson/osd/backfill_state: always go to Enqueuing when object is pushed
during Waiting Fixes: https://tracker.ceph.com/issues/68061 Signed-off-by: Xuehan Xu <[email protected]>
1 parent a278231 commit bfe15f6

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

src/crimson/osd/backfill_state.cc

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ BackfillState::PrimaryScanning::react(ObjectPushed evt)
403403
{
404404
logger().debug("PrimaryScanning::react() on ObjectPushed; evt.object={}",
405405
evt.object);
406-
backfill_state().progress_tracker->complete_to(evt.object, evt.stat);
406+
backfill_state().progress_tracker->complete_to(evt.object, evt.stat, true);
407407
return discard_event();
408408
}
409409

@@ -480,7 +480,7 @@ BackfillState::ReplicasScanning::react(ObjectPushed evt)
480480
{
481481
logger().debug("ReplicasScanning::react() on ObjectPushed; evt.object={}",
482482
evt.object);
483-
backfill_state().progress_tracker->complete_to(evt.object, evt.stat);
483+
backfill_state().progress_tracker->complete_to(evt.object, evt.stat, true);
484484
return discard_event();
485485
}
486486

@@ -496,16 +496,8 @@ BackfillState::Waiting::react(ObjectPushed evt)
496496
{
497497
logger().debug("Waiting::react() on ObjectPushed; evt.object={}",
498498
evt.object);
499-
backfill_state().progress_tracker->complete_to(evt.object, evt.stat);
500-
if (!Enqueuing::all_enqueued(peering_state(),
501-
backfill_state().backfill_info,
502-
backfill_state().peer_backfill_info)) {
503-
return transit<Enqueuing>();
504-
} else {
505-
// we still have something to wait on
506-
logger().debug("Waiting::react() on ObjectPushed; still waiting");
507-
return discard_event();
508-
}
499+
backfill_state().progress_tracker->complete_to(evt.object, evt.stat, false);
500+
return transit<Enqueuing>();;
509501
}
510502

511503
// -- Done
@@ -559,7 +551,8 @@ void BackfillState::ProgressTracker::enqueue_drop(const hobject_t& obj)
559551

560552
void BackfillState::ProgressTracker::complete_to(
561553
const hobject_t& obj,
562-
const pg_stat_t& stats)
554+
const pg_stat_t& stats,
555+
bool may_push_to_max)
563556
{
564557
logger().debug("{}: obj={}",
565558
__func__, obj);
@@ -580,7 +573,8 @@ void BackfillState::ProgressTracker::complete_to(
580573
soid,
581574
*item.stats);
582575
}
583-
if (Enqueuing::all_enqueued(peering_state(),
576+
if (may_push_to_max &&
577+
Enqueuing::all_enqueued(peering_state(),
584578
backfill_state().backfill_info,
585579
backfill_state().peer_backfill_info) &&
586580
tracked_objects_completed()) {

src/crimson/osd/backfill_state.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ class BackfillState::ProgressTracker {
421421

422422
bool enqueue_push(const hobject_t&);
423423
void enqueue_drop(const hobject_t&);
424-
void complete_to(const hobject_t&, const pg_stat_t&);
424+
void complete_to(const hobject_t&, const pg_stat_t&, bool may_push_to_max);
425425
};
426426

427427
} // namespace crimson::osd

0 commit comments

Comments
 (0)