return interruptor::with_interruption([this] {
return do_recovery();
}, [](std::exception_ptr) {
- return seastar::make_ready_future<bool>(false);
- }, pg, epoch_started).then([](bool do_recovery) {
- if (do_recovery) {
- return seastar::stop_iteration::no;
- } else {
- return seastar::stop_iteration::yes;
- }
- });
+ return seastar::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
+ }, pg, epoch_started);
});
});
}
{
}
-UrgentRecovery::interruptible_future<bool>
+UrgentRecovery::interruptible_future<seastar::stop_iteration>
UrgentRecovery::do_recovery()
{
LOG_PREFIX(UrgentRecovery::do_recovery);
DEBUGDPPI("{}: {}", *pg, __func__, *this);
if (pg->has_reset_since(epoch_started)) {
- return seastar::make_ready_future<bool>(false);
+ return seastar::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
}
return pg->find_unfound(epoch_started
return pg->get_recovery_handler()->recover_missing(
trigger, soid, need, false);
}).then_interruptible([] {
- return seastar::make_ready_future<bool>(false);
+ return seastar::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
});
});
}
delay)
{}
-PglogBasedRecovery::interruptible_future<bool>
+PglogBasedRecovery::interruptible_future<seastar::stop_iteration>
PglogBasedRecovery::do_recovery()
{
LOG_PREFIX(PglogBasedRecovery::do_recovery);
DEBUGDPPI("{}: {}", *pg, __func__, *this);
if (pg->has_reset_since(epoch_started)) {
- return seastar::make_ready_future<bool>(false);
+ return seastar::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
}
return pg->find_unfound(epoch_started
).then_interruptible([this] {
scheduler_class
};
}
- using do_recovery_ret_t = typename PhasedOperationT<T>::template interruptible_future<bool>;
+ using do_recovery_ret_t = typename PhasedOperationT<T>::template interruptible_future<seastar::stop_iteration>;
virtual do_recovery_ret_t do_recovery() = 0;
ShardServices &ss;
const crimson::osd::scheduler::scheduler_class_t scheduler_class;
private:
void dump_detail(Formatter* f) const final;
- interruptible_future<bool> do_recovery() override;
+ interruptible_future<seastar::stop_iteration> do_recovery() override;
const hobject_t soid;
const eversion_t need;
};
return epoch_started;
}
private:
- interruptible_future<bool> do_recovery() override;
+ interruptible_future<seastar::stop_iteration> do_recovery() override;
bool cancelled = false;
};
pg->set_pglog_based_recovery_op(op.get());
}
-PGRecovery::interruptible_future<bool>
+PGRecovery::interruptible_future<seastar::stop_iteration>
PGRecovery::start_recovery_ops(
RecoveryBackend::RecoveryBlockingEvent::TriggerI& trigger,
PglogBasedRecovery &recover_op,
size_t max_to_start)
{
LOG_PREFIX(PGRecovery::start_recovery_ops);
+
assert(pg->is_primary());
assert(pg->is_peered());
if (pg->has_reset_since(recover_op.get_epoch_started()) ||
recover_op.is_cancelled()) {
DEBUGDPP("recovery {} cancelled.", pg->get_pgid(), recover_op);
- co_return false;
+ co_return seastar::stop_iteration::yes;
}
ceph_assert(pg->is_recovering());
if (pg->has_reset_since(recover_op.get_epoch_started()) ||
recover_op.is_cancelled()) {
DEBUGDPP("recovery {} cancelled.", pg->get_pgid(), recover_op);
- co_return false;
+ co_return seastar::stop_iteration::yes;
}
ceph_assert(pg->is_recovering());
ceph_assert(!pg->is_backfilling());
} else {
all_replicas_recovered();
}
- co_return false;
+ co_return seastar::stop_iteration::yes;
}
- co_return true;
+ co_return seastar::stop_iteration::no;
}
size_t PGRecovery::start_primary_recovery_ops(
virtual ~PGRecovery() {}
void start_pglogbased_recovery();
- interruptible_future<bool> start_recovery_ops(
+ interruptible_future<seastar::stop_iteration> start_recovery_ops(
RecoveryBackend::RecoveryBlockingEvent::TriggerI&,
crimson::osd::PglogBasedRecovery &recover_op,
size_t max_to_start);