From bf7f101a787652644c27aae4e752fd21f265e866 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 --- 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 08f4e2a7251..5d1bc8eaa8a 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -6421,6 +6421,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); @@ -6494,14 +6503,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, @@ -6530,15 +6537,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( @@ -6552,6 +6557,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 abaef117a80..dd02579f2ef 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1582,6 +1582,7 @@ public: TrivialEvent(Backfilled) TrivialEvent(LocalBackfillReserved) TrivialEvent(RemoteBackfillReserved) + TrivialEvent(RejectRemoteReservation) TrivialEvent(RemoteReservationRejected) TrivialEvent(RequestBackfill) TrivialEvent(RequestRecovery) @@ -1991,11 +1992,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); }; @@ -2014,11 +2017,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