const hobject_t &soid, eversion_t need)
{
if (pg->get_peering_state().get_missing_loc().is_deleted(soid)) {
- return pg->get_recovery_backend()->get_recovering(soid).make_blocking_future(
+ return pg->get_recovery_backend()->add_recovering(soid).make_blocking_future(
pg->get_recovery_backend()->recover_delete(soid, need));
} else {
- return pg->get_recovery_backend()->get_recovering(soid).make_blocking_future(
+ return pg->get_recovery_backend()->add_recovering(soid).make_blocking_future(
pg->get_recovery_backend()->recover_object(soid, need).handle_exception(
[=, soid = std::move(soid)] (auto e) {
on_failed_recover({ pg->get_pg_whoami() }, soid, need);
std::vector<crimson::osd::blocking_future<>> *in_progress)
{
in_progress->push_back(
- pg->get_recovery_backend()->get_recovering(soid).make_blocking_future(
+ pg->get_recovery_backend()->add_recovering(soid).make_blocking_future(
pg->get_recovery_backend()->push_delete(soid, need).then([=] {
object_stat_sum_t stat_diff;
stat_diff.num_objects_recovered = 1;
std::vector<crimson::osd::blocking_future<>> *in_progress)
{
in_progress->push_back(
- pg->get_recovery_backend()->get_recovering(soid).make_blocking_future(
+ pg->get_recovery_backend()->add_recovering(soid).make_blocking_future(
pg->get_recovery_backend()->recover_object(soid, need).handle_exception(
[=, soid = std::move(soid)] (auto e) {
on_failed_recover({ pg->get_pg_whoami() }, soid, need);
coll{coll},
backend{backend} {}
virtual ~RecoveryBackend() {}
+ WaitForObjectRecovery& add_recovering(const hobject_t& soid) {
+ auto [it, added] = recovering.emplace(soid, WaitForObjectRecovery{});
+ assert(added);
+ return it->second;
+ }
WaitForObjectRecovery& get_recovering(const hobject_t& soid) {
- return recovering[soid];
+ assert(is_recovering(soid));
+ return recovering.at(soid);
}
void remove_recovering(const hobject_t& soid) {
recovering.erase(soid);