From: Radoslaw Zarzynski Date: Tue, 12 May 2020 14:46:14 +0000 (+0200) Subject: crimson/osd: implement BackfillListener::enqueue_push(). X-Git-Tag: v16.1.0~1720^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0e08e41e21a93834485e80be03383f494a80fed0;p=ceph.git crimson/osd: implement BackfillListener::enqueue_push(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/backfill_state.h b/src/crimson/osd/backfill_state.h index 58b307b32fb..96ae2482af7 100644 --- a/src/crimson/osd/backfill_state.h +++ b/src/crimson/osd/backfill_state.h @@ -48,6 +48,9 @@ struct BackfillState { // for tracking replicas. hobject_t object; pg_stat_t stat; + ObjectPushed(hobject_t object) + : object(std::move(object)) { + } }; struct Triggered : sc::event { diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index ed770018395..74f20a0bd83 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -453,7 +453,17 @@ void PGRecovery::enqueue_push( const hobject_t& obj, const eversion_t& v) { - ceph_abort_msg("Not implemented"); + logger().debug("{}: target={} obj={} v={}", + __func__, target, obj, v); + std::ignore = pg->get_recovery_backend()->recover_object(obj, v).\ + handle_exception([] (auto) { + ceph_abort_msg("got exception on backfill's push"); + return seastar::make_ready_future<>(); + }).then([this, obj] { + logger().debug("enqueue_push:{}", __func__); + using BackfillState = crimson::osd::BackfillState; + start_backfill_recovery(BackfillState::ObjectPushed(std::move(obj))); + }); } void PGRecovery::enqueue_drop( diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index 8f60ab61e8a..6861171d68c 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -84,6 +84,8 @@ seastar::future<> ReplicatedRecoveryBackend::recover_object( return seastar::make_ready_future<>(); }) ); + } else { + logger().debug("recover_object: already has obc!"); } return seastar::now(); }().then([this, soid, need, &pops, &shards] {