CephContext *cct;
OSDriver osdriver;
SnapMapper snap_mapper;
+ bool eio_errors_to_process = false;
virtual PGBackend *get_pgbackend() = 0;
public:
list<OpRequestRef> waiting_for_scrub;
list<OpRequestRef> waiting_for_cache_not_full;
- list<OpRequestRef> waiting_for_all_missing;
+ list<OpRequestRef> waiting_for_clean_to_primary_repair;
map<hobject_t, list<OpRequestRef>> waiting_for_unreadable_object,
waiting_for_degraded_object,
waiting_for_blocked_object;
// common to both scrubs
bool active;
- bool queue_snap_trim;
int waiting_on;
set<pg_shard_t> waiting_on_whom;
int shallow_errors;
// clear all state
void reset() {
active = false;
- queue_snap_trim = false;
waiting_on = 0;
waiting_on_whom.clear();
if (active_rep_scrub) {
void scrub_finish();
void scrub_clear_state();
void _scan_snaps(ScrubMap &map);
+ void _repair_oinfo_oid(ScrubMap &map);
void _scan_rollback_obs(
const vector<ghobject_t> &rollback_obs,
ThreadPool::TPHandle &handle);
TrivialEvent(LocalBackfillReserved)
TrivialEvent(RemoteBackfillReserved)
TrivialEvent(RemoteReservationRejected)
+ TrivialEvent(CancelBackfill)
TrivialEvent(RequestBackfill)
TrivialEvent(RequestRecovery)
TrivialEvent(RecoveryDone)
TrivialEvent(BackfillTooFull)
TrivialEvent(RecoveryTooFull)
+ TrivialEvent(CancelRecovery)
TrivialEvent(AllReplicasRecovered)
TrivialEvent(DoRecovery)
struct Recovered : boost::statechart::state< Recovered, Active >, NamedState {
typedef boost::mpl::list<
boost::statechart::transition< GoClean, Clean >,
+ boost::statechart::transition< DoRecovery, WaitLocalRecoveryReserved >,
boost::statechart::custom_reaction< AllReplicasActivated >
> reactions;
explicit Recovered(my_context ctx);
struct Backfilling : boost::statechart::state< Backfilling, Active >, NamedState {
typedef boost::mpl::list<
boost::statechart::transition< Backfilled, Recovered >,
+ boost::statechart::custom_reaction< CancelBackfill >,
boost::statechart::custom_reaction< RemoteReservationRejected >
> reactions;
explicit Backfilling(my_context ctx);
boost::statechart::result react(const RemoteReservationRejected& evt);
+ boost::statechart::result react(const CancelBackfill& evt);
void exit();
};
struct Recovering : boost::statechart::state< Recovering, Active >, NamedState {
typedef boost::mpl::list <
boost::statechart::custom_reaction< AllReplicasRecovered >,
+ boost::statechart::custom_reaction< CancelRecovery >,
boost::statechart::custom_reaction< RequestBackfill >
> reactions;
explicit Recovering(my_context ctx);
void exit();
- void release_reservations();
+ void release_reservations(bool cancel = false);
boost::statechart::result react(const AllReplicasRecovered &evt);
+ boost::statechart::result react(const CancelRecovery& evt);
boost::statechart::result react(const RequestBackfill &evt);
};