@@ -13,7 +13,7 @@ namespace {
1313
1414namespace crimson ::osd {
1515
16- typename InterruptibleOperation::template interruptible_future<>
16+ typename InterruptibleOperation::template interruptible_future<bool >
1717CommonClientRequest::do_recover_missing (
1818 Ref<PG> pg,
1919 const hobject_t & soid,
@@ -45,22 +45,29 @@ CommonClientRequest::do_recover_missing(
4545 if (!needs_recovery_or_backfill) {
4646 logger ().debug (" {} reqid {} nothing to recover {}" ,
4747 __func__, reqid, soid);
48- return seastar::now ( );
48+ return seastar::make_ready_future< bool >( false );
4949 }
5050
51+ if (pg->get_peering_state ().get_missing_loc ().is_unfound (soid)) {
52+ return seastar::make_ready_future<bool >(true );
53+ }
5154 logger ().debug (" {} reqid {} need to wait for recovery, {} version {}" ,
5255 __func__, reqid, soid, ver);
5356 if (pg->get_recovery_backend ()->is_recovering (soid)) {
5457 logger ().debug (" {} reqid {} object {} version {}, already recovering" ,
5558 __func__, reqid, soid, ver);
56- return pg->get_recovery_backend ()->get_recovering (soid).wait_for_recovered ();
59+ return pg->get_recovery_backend ()->get_recovering (
60+ soid).wait_for_recovered (
61+ ).then ([] {
62+ return seastar::make_ready_future<bool >(false );
63+ });
5764 } else {
5865 logger ().debug (" {} reqid {} object {} version {}, starting recovery" ,
5966 __func__, reqid, soid, ver);
6067 auto [op, fut] =
6168 pg->get_shard_services ().start_operation <UrgentRecovery>(
6269 soid, ver, pg, pg->get_shard_services (), pg->get_osdmap_epoch ());
63- return std::move (fut );
70+ return fut. then ([] { return seastar::make_ready_future< bool >( false ); } );
6471 }
6572}
6673
0 commit comments