From 5b9c08eadcbd26d22059688f9181e3484371ac61 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Mon, 28 Aug 2023 11:14:27 +0800 Subject: [PATCH] crimson/osd/backfill_state: set backfill_infos when the last round of scan doesn't produce any object that needs to be backkfilled Signed-off-by: Xuehan Xu --- src/crimson/osd/backfill_state.cc | 9 +++++++-- src/crimson/osd/recovery_backend.cc | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/crimson/osd/backfill_state.cc b/src/crimson/osd/backfill_state.cc index f5f9eb37f95..b306226a9dd 100644 --- a/src/crimson/osd/backfill_state.cc +++ b/src/crimson/osd/backfill_state.cc @@ -352,9 +352,14 @@ BackfillState::Enqueuing::Enqueuing(my_context ctx) logger().debug("{}: reached end for current local chunk", __func__); post_event(RequestPrimaryScanning{}); - } else if (backfill_state().progress_tracker->tracked_objects_completed()) { - post_event(RequestDone{}); } else { + if (backfill_state().progress_tracker->tracked_objects_completed() + && Enqueuing::all_enqueued(peering_state(), + backfill_state().backfill_info, + backfill_state().peer_backfill_info)) { + backfill_state().last_backfill_started = hobject_t::get_max(); + backfill_listener().update_peers_last_backfill(hobject_t::get_max()); + } logger().debug("{}: reached end for both local and all peers " "but still has in-flight operations", __func__); post_event(RequestWaiting{}); diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index 9d480537089..e45ca35e797 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -217,8 +217,9 @@ RecoveryBackend::scan_for_backfill( bi.end = std::move(next); bi.version = pg.get_info().last_update; bi.objects = std::move(*version_map); - logger().debug("{} BackfillInterval filled, leaving", - "scan_for_backfill"); + logger().debug("{} BackfillInterval filled, leaving, {}", + "scan_for_backfill", + bi); return seastar::make_ready_future(std::move(bi)); }); }); -- 2.47.3