]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/recovery_backend: always set the primary osd's
authorXuehan Xu <xuxuehan@qianxin.com>
Wed, 30 Oct 2024 01:22:45 +0000 (09:22 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 7 Feb 2025 03:24:57 +0000 (11:24 +0800)
BackfillInterval::version to the last_update_ondisk

So that updates to the PG during the backfill won't be skipped in
BackfillState::Enqueuing::maybe_update_range()

Fixes: https://tracker.ceph.com/issues/67916
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/osd/backfill_facades.h
src/crimson/osd/backfill_state.cc
src/crimson/osd/backfill_state.h
src/crimson/osd/recovery_backend.cc
src/test/crimson/test_backfill.cc

index ce649303d4f48f8c269c434f118c479a4ae12024..de1cda434b85ca22db128f3df44614eab46c0c57 100644 (file)
@@ -28,8 +28,8 @@ struct PeeringFacade final : BackfillState::PeeringFacade {
     return peering_state.get_peer_info(peer).last_backfill;
   }
 
-  const eversion_t& get_last_update() const override {
-    return peering_state.get_info().last_update;
+  eversion_t get_pg_committed_to() const override {
+    return peering_state.get_pg_committed_to();
   }
 
   const eversion_t& get_log_tail() const override {
index 09dd50172e6cc65cac1fe79cfe9a7e59fdcb0897..a068c1fa8d41bd95602f865d8d34ceaa2a65e1c0 100644 (file)
@@ -406,7 +406,7 @@ BackfillState::Enqueuing::Enqueuing(my_context ctx)
 BackfillState::PrimaryScanning::PrimaryScanning(my_context ctx)
   : my_base(ctx)
 {
-  backfill_state().backfill_info.version = peering_state().get_last_update();
+  backfill_state().backfill_info.version = peering_state().get_pg_committed_to();
   backfill_listener().request_primary_scan(
     backfill_state().backfill_info.begin);
 }
@@ -416,6 +416,7 @@ BackfillState::PrimaryScanning::react(PrimaryScanned evt)
 {
   LOG_PREFIX(BackfillState::PrimaryScanning::react::PrimaryScanned);
   DEBUGDPP("", pg());
+  evt.result.version = backfill_state().backfill_info.version;
   backfill_state().backfill_info = std::move(evt.result);
   if (!backfill_state().is_suspended()) {
     return transit<Enqueuing>();
index aa0e2e9ae4fceeab12f92352db0cd14f1c6f9d0a..5b497adb38499fd06c70185f2171a57a371aa072 100644 (file)
@@ -387,7 +387,7 @@ struct BackfillState::PeeringFacade {
   virtual const std::set<pg_shard_t>& get_backfill_targets() const = 0;
   virtual const hobject_t& get_peer_last_backfill(pg_shard_t peer) const = 0;
   virtual const PGLog& get_pg_log() const = 0;
-  virtual const eversion_t& get_last_update() const = 0;
+  virtual eversion_t get_pg_committed_to() const = 0;
   virtual const eversion_t& get_log_tail() const = 0;
 
   // the performance impact of `std::function` has not been considered yet.
index f1dd797d254f8958ca58d0dc53f33c6187cf4e5c..d8141f1e5cf857258cb0653a1ecbce2432c3a716 100644 (file)
@@ -265,11 +265,11 @@ RecoveryBackend::scan_for_backfill(
          }, PGBackend::load_metadata_ertr::assert_all{});
        }
       });
-    }).then_interruptible([FNAME, this, version_map, start=std::move(start), next=std::move(next)] {
+    }).then_interruptible([FNAME, version_map, start=std::move(start),
+                         next=std::move(next), this] {
       BackfillInterval bi;
       bi.begin = std::move(start);
       bi.end = std::move(next);
-      bi.version = pg.get_info().last_update;
       bi.objects = std::move(*version_map);
       DEBUGDPP("{} BackfillInterval filled, leaving, {}",
               "scan_for_backfill",
index b1c9c0575d541c21bbbc182fd0952298673e09b1..117024a48d4b07beaed1bb7466053846d5abfe54 100644 (file)
@@ -233,7 +233,7 @@ struct BackfillFixture::PeeringFacade
   const hobject_t& get_peer_last_backfill(pg_shard_t peer) const override {
     return backfill_targets.at(peer).last_backfill;
   }
-  const eversion_t& get_last_update() const override {
+  eversion_t get_pg_committed_to() const override {
     return backfill_source.last_update;
   }
   const eversion_t& get_log_tail() const override {