From 206400997daaec97fe9af7e2e735e1b609006107 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 4 Oct 2017 14:55:15 -0500 Subject: [PATCH] osd/PG: separate verb 'Reject' from passive 'rejected' This reduces pg->reject_reservation() callsites from 2 to 1 and makes the state transitions a bit more explicit. Signed-off-by: Sage Weil (cherry picked from commit bf7f101a787652644c27aae4e752fd21f265e866) --- src/osd/PG.cc | 31 +++++++++++++++++++++++-------- src/osd/PG.h | 5 +++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 0955cbbcd6c6c..d4a07ec828a83 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -6640,6 +6640,15 @@ PG::RecoveryState::RepNotRecovering::RepNotRecovering(my_context ctx) context< RecoveryMachine >().log_enter(state_name); } +boost::statechart::result +PG::RecoveryState::RepNotRecovering::react(const RejectRemoteReservation &evt) +{ + PG *pg = context< RecoveryMachine >().pg; + pg->reject_reservation(); + post_event(RemoteReservationRejected()); + return discard_event(); +} + void PG::RecoveryState::RepNotRecovering::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); @@ -6713,14 +6722,12 @@ PG::RecoveryState::RepNotRecovering::react(const RequestBackfillPrio &evt) (rand()%1000 < (pg->cct->_conf->osd_debug_reject_backfill_probability*1000.0))) { ldout(pg->cct, 10) << "backfill reservation rejected: failure injection" << dendl; - pg->reject_reservation(); - post_event(RemoteReservationRejected()); + post_event(RejectRemoteReservation()); } else if (!pg->cct->_conf->osd_debug_skip_full_check_in_backfill_reservation && pg->osd->check_backfill_full(ss)) { ldout(pg->cct, 10) << "backfill reservation rejected: " << ss.str() << dendl; - pg->reject_reservation(); - post_event(RemoteReservationRejected()); + post_event(RejectRemoteReservation()); } else { pg->osd->remote_reserver.request_reservation( pg->info.pgid, @@ -6749,15 +6756,13 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved & (rand()%1000 < (pg->cct->_conf->osd_debug_reject_backfill_probability*1000.0))) { ldout(pg->cct, 10) << "backfill reservation rejected after reservation: " << "failure injection" << dendl; - pg->reject_reservation(); - post_event(RemoteReservationRejected()); + post_event(RejectRemoteReservation()); return discard_event(); } else if (!pg->cct->_conf->osd_debug_skip_full_check_in_backfill_reservation && pg->osd->check_backfill_full(ss)) { ldout(pg->cct, 10) << "backfill reservation rejected after reservation: " << ss.str() << dendl; - pg->reject_reservation(); - post_event(RemoteReservationRejected()); + post_event(RejectRemoteReservation()); return discard_event(); } else { pg->osd->send_message_osd_cluster( @@ -6771,6 +6776,16 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved & } } +boost::statechart::result +PG::RecoveryState::RepWaitBackfillReserved::react( + const RejectRemoteReservation &evt) +{ + PG *pg = context< RecoveryMachine >().pg; + pg->reject_reservation(); + post_event(RemoteReservationRejected()); + return discard_event(); +} + boost::statechart::result PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteReservationRejected &evt) { diff --git a/src/osd/PG.h b/src/osd/PG.h index c8d6b9fa21023..8e461fdf31396 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1587,6 +1587,7 @@ public: TrivialEvent(Backfilled) TrivialEvent(LocalBackfillReserved) TrivialEvent(RemoteBackfillReserved) + TrivialEvent(RejectRemoteReservation) TrivialEvent(RemoteReservationRejected) TrivialEvent(RequestBackfill) TrivialEvent(RequestRecovery) @@ -1996,11 +1997,13 @@ public: struct RepWaitBackfillReserved : boost::statechart::state< RepWaitBackfillReserved, ReplicaActive >, NamedState { typedef boost::mpl::list< boost::statechart::custom_reaction< RemoteBackfillReserved >, + boost::statechart::custom_reaction< RejectRemoteReservation >, boost::statechart::custom_reaction< RemoteReservationRejected > > reactions; explicit RepWaitBackfillReserved(my_context ctx); void exit(); boost::statechart::result react(const RemoteBackfillReserved &evt); + boost::statechart::result react(const RejectRemoteReservation &evt); boost::statechart::result react(const RemoteReservationRejected &evt); }; @@ -2019,11 +2022,13 @@ public: typedef boost::mpl::list< boost::statechart::custom_reaction< RequestBackfillPrio >, boost::statechart::transition< RequestRecovery, RepWaitRecoveryReserved >, + boost::statechart::custom_reaction< RejectRemoteReservation >, boost::statechart::transition< RemoteReservationRejected, RepNotRecovering >, // if primary is preempted or cancels boost::statechart::transition< RecoveryDone, RepNotRecovering > // for compat with pre-reservation peers > reactions; explicit RepNotRecovering(my_context ctx); boost::statechart::result react(const RequestBackfillPrio &evt); + boost::statechart::result react(const RejectRemoteReservation &evt); void exit(); }; -- 2.39.5