@@ -19,7 +19,8 @@ InterruptibleOperation::template interruptible_future<>
1919CommonClientRequest::recover_missings (
2020 Ref<PG> &pg,
2121 const hobject_t & soid,
22- std::set<snapid_t > &&snaps)
22+ std::set<snapid_t > &&snaps,
23+ const osd_reqid_t & reqid)
2324{
2425 LOG_PREFIX (CommonClientRequest::recover_missings);
2526 if (!pg->is_primary ()) {
@@ -28,17 +29,17 @@ CommonClientRequest::recover_missings(
2829 return seastar::now ();
2930 }
3031 return do_recover_missing (
31- pg, soid.get_head ()
32- ).then_interruptible ([snaps=std::move (snaps), pg, soid]() mutable {
32+ pg, soid.get_head (), reqid
33+ ).then_interruptible ([snaps=std::move (snaps), pg, soid, reqid ]() mutable {
3334 return pg->obc_loader .with_obc <RWState::RWREAD>(
3435 soid.get_head (),
35- [snaps=std::move (snaps), pg, soid](auto head, auto ) mutable {
36+ [snaps=std::move (snaps), pg, soid, reqid ](auto head, auto ) mutable {
3637 return seastar::do_with (
3738 std::move (snaps),
38- [pg, soid, head](auto &snaps) mutable {
39+ [pg, soid, head, reqid ](auto &snaps) mutable {
3940 return InterruptibleOperation::interruptor::do_for_each (
4041 snaps,
41- [pg, soid, head](auto &snap) mutable ->
42+ [pg, soid, head, reqid ](auto &snap) mutable ->
4243 InterruptibleOperation::template interruptible_future<> {
4344 auto coid = head->obs .oi .soid ;
4445 coid.snap = snap;
@@ -50,7 +51,7 @@ CommonClientRequest::recover_missings(
5051 * we skip the oid as there is no corresponding clone to recover.
5152 * See https://tracker.ceph.com/issues/63821 */
5253 if (oid) {
53- return do_recover_missing (pg, *oid);
54+ return do_recover_missing (pg, *oid, reqid );
5455 } else {
5556 return seastar::now ();
5657 }
@@ -64,19 +65,29 @@ CommonClientRequest::recover_missings(
6465
6566typename InterruptibleOperation::template interruptible_future<>
6667CommonClientRequest::do_recover_missing (
67- Ref<PG>& pg, const hobject_t & soid)
68+ Ref<PG>& pg,
69+ const hobject_t & soid,
70+ const osd_reqid_t & reqid)
6871{
6972 eversion_t ver;
7073 assert (pg->is_primary ());
71- logger ().debug (" {} check for recovery, {}" , __func__, soid);
74+ logger ().debug (" {} reqid {} check for recovery, {}" ,
75+ __func__, reqid, soid);
7276 if (!pg->is_unreadable_object (soid, &ver) &&
7377 !pg->is_degraded_or_backfilling_object (soid)) {
78+ logger ().debug (" {} reqid {} nothing to recover {}" ,
79+ __func__, reqid, soid);
7480 return seastar::now ();
7581 }
76- logger ().debug (" {} need to wait for recovery, {}" , __func__, soid);
82+ logger ().debug (" {} reqid {} need to wait for recovery, {} version {}" ,
83+ __func__, reqid, soid, ver);
7784 if (pg->get_recovery_backend ()->is_recovering (soid)) {
85+ logger ().debug (" {} reqid {} object {} version {}, already recovering" ,
86+ __func__, reqid, soid, ver);
7887 return pg->get_recovery_backend ()->get_recovering (soid).wait_for_recovered ();
7988 } else {
89+ logger ().debug (" {} reqid {} object {} version {}, starting recovery" ,
90+ __func__, reqid, soid, ver);
8091 auto [op, fut] =
8192 pg->get_shard_services ().start_operation <UrgentRecovery>(
8293 soid, ver, pg, pg->get_shard_services (), pg->get_osdmap_epoch ());
0 commit comments