Skip to content

Commit 9d6eab5

Browse files
committed
crimson/osd/recovery_backend: always set the primary osd's
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 <[email protected]>
1 parent 693d7d4 commit 9d6eab5

File tree

5 files changed

+8
-7
lines changed

5 files changed

+8
-7
lines changed

src/crimson/osd/backfill_facades.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ struct PeeringFacade final : BackfillState::PeeringFacade {
2828
return peering_state.get_peer_info(peer).last_backfill;
2929
}
3030

31-
const eversion_t& get_last_update() const override {
32-
return peering_state.get_info().last_update;
31+
eversion_t get_pg_committed_to() const override {
32+
return peering_state.get_pg_committed_to();
3333
}
3434

3535
const eversion_t& get_log_tail() const override {

src/crimson/osd/backfill_state.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ BackfillState::Enqueuing::Enqueuing(my_context ctx)
406406
BackfillState::PrimaryScanning::PrimaryScanning(my_context ctx)
407407
: my_base(ctx)
408408
{
409-
backfill_state().backfill_info.version = peering_state().get_last_update();
409+
backfill_state().backfill_info.version = peering_state().get_pg_committed_to();
410410
backfill_listener().request_primary_scan(
411411
backfill_state().backfill_info.begin);
412412
}
@@ -416,6 +416,7 @@ BackfillState::PrimaryScanning::react(PrimaryScanned evt)
416416
{
417417
LOG_PREFIX(BackfillState::PrimaryScanning::react::PrimaryScanned);
418418
DEBUGDPP("", pg());
419+
evt.result.version = backfill_state().backfill_info.version;
419420
backfill_state().backfill_info = std::move(evt.result);
420421
if (!backfill_state().is_suspended()) {
421422
return transit<Enqueuing>();

src/crimson/osd/backfill_state.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ struct BackfillState::PeeringFacade {
387387
virtual const std::set<pg_shard_t>& get_backfill_targets() const = 0;
388388
virtual const hobject_t& get_peer_last_backfill(pg_shard_t peer) const = 0;
389389
virtual const PGLog& get_pg_log() const = 0;
390-
virtual const eversion_t& get_last_update() const = 0;
390+
virtual eversion_t get_pg_committed_to() const = 0;
391391
virtual const eversion_t& get_log_tail() const = 0;
392392

393393
// the performance impact of `std::function` has not been considered yet.

src/crimson/osd/recovery_backend.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,11 @@ RecoveryBackend::scan_for_backfill(
265265
}, PGBackend::load_metadata_ertr::assert_all{});
266266
}
267267
});
268-
}).then_interruptible([FNAME, this, version_map, start=std::move(start), next=std::move(next)] {
268+
}).then_interruptible([FNAME, version_map, start=std::move(start),
269+
next=std::move(next), this] {
269270
BackfillInterval bi;
270271
bi.begin = std::move(start);
271272
bi.end = std::move(next);
272-
bi.version = pg.get_info().last_update;
273273
bi.objects = std::move(*version_map);
274274
DEBUGDPP("{} BackfillInterval filled, leaving, {}",
275275
"scan_for_backfill",

src/test/crimson/test_backfill.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ struct BackfillFixture::PeeringFacade
233233
const hobject_t& get_peer_last_backfill(pg_shard_t peer) const override {
234234
return backfill_targets.at(peer).last_backfill;
235235
}
236-
const eversion_t& get_last_update() const override {
236+
eversion_t get_pg_committed_to() const override {
237237
return backfill_source.last_update;
238238
}
239239
const eversion_t& get_log_tail() const override {

0 commit comments

Comments
 (0)