@@ -907,11 +907,23 @@ void PG::mutate_object(
907907 }
908908}
909909
910+ void PG::enqueue_push_for_backfill (
911+ const hobject_t &obj,
912+ const eversion_t &v,
913+ const std::vector<pg_shard_t > &peers)
914+ {
915+ assert (recovery_handler);
916+ assert (recovery_handler->backfill_state );
917+ auto backfill_state = recovery_handler->backfill_state .get ();
918+ backfill_state->enqueue_standalone_push (obj, v, peers);
919+ }
920+
910921PG::interruptible_future<
911922 std::tuple<PG::interruptible_future<>,
912923 PG::interruptible_future<>>>
913924PG::submit_transaction (
914925 ObjectContextRef&& obc,
926+ ObjectContextRef&& new_clone,
915927 ceph::os::Transaction&& txn,
916928 osd_op_params_t && osd_op_p,
917929 std::vector<pg_log_entry_t >&& log_entries)
@@ -924,8 +936,9 @@ PG::submit_transaction(
924936 }
925937
926938 epoch_t map_epoch = get_osdmap_epoch ();
939+ auto at_version = osd_op_p.at_version ;
927940
928- peering_state.pre_submit_op (obc->obs .oi .soid , log_entries, osd_op_p. at_version );
941+ peering_state.pre_submit_op (obc->obs .oi .soid , log_entries, at_version);
929942 peering_state.update_trim_to ();
930943
931944 ceph_assert (!log_entries.empty ());
@@ -939,6 +952,7 @@ PG::submit_transaction(
939952 auto [submitted, all_completed] = co_await backend->submit_transaction (
940953 peering_state.get_acting_recovery_backfill (),
941954 obc->obs .oi .soid ,
955+ std::move (new_clone),
942956 std::move (txn),
943957 std::move (osd_op_p),
944958 peering_state.get_last_peering_reset (),
@@ -947,8 +961,8 @@ PG::submit_transaction(
947961 co_return std::make_tuple (
948962 std::move (submitted),
949963 all_completed.then_interruptible (
950- [this , last_complete=peering_state.get_info ().last_complete ,
951- at_version=osd_op_p. at_version ] (auto acked) {
964+ [this , last_complete=peering_state.get_info ().last_complete , at_version]
965+ (auto acked) {
952966 for (const auto & peer : acked) {
953967 peering_state.update_peer_last_complete_ondisk (
954968 peer.shard , peer.last_complete_ondisk );
@@ -1153,11 +1167,13 @@ PG::submit_executer_fut PG::submit_executer(
11531167 [FNAME, this ](auto && txn,
11541168 auto && obc,
11551169 auto && osd_op_p,
1156- auto && log_entries) {
1170+ auto && log_entries,
1171+ auto && new_clone) {
11571172 DEBUGDPP (" object {} submitting txn" , *this , obc->get_oid ());
11581173 mutate_object (obc, txn, osd_op_p);
11591174 return submit_transaction (
11601175 std::move (obc),
1176+ std::move (new_clone),
11611177 std::move (txn),
11621178 std::move (osd_op_p),
11631179 std::move (log_entries));
@@ -1604,7 +1620,7 @@ bool PG::should_send_op(
16041620 // missing set
16051621 hoid <= peering_state.get_peer_info (peer).last_backfill ||
16061622 (has_backfill_state () && hoid <= get_last_backfill_started () &&
1607- !peering_state. get_peer_missing (peer). is_missing ( hoid)));
1623+ !is_missing_on_peer (peer, hoid)));
16081624 if (!should_send) {
16091625 ceph_assert (is_backfill_target (peer));
16101626 logger ().debug (" {} issue_repop shipping empty opt to osd."
0 commit comments