From 4be53d5eebbc294878ba38050d841359b6c8e19e Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 23 Sep 2014 12:16:55 -0700 Subject: [PATCH] PG: check full ratio again post-reservation Otherwise, we might queue 30 pgs for backfill at 0.80 fullness and then never check again filling the osd after pg 11. Fixes: #9574 Backport: dumpling, firefly, giant Signed-off-by: Samuel Just --- src/osd/PG.cc | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 2c86f3ba2d251..83d03e5203cff 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -5926,14 +5926,33 @@ boost::statechart::result PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved &evt) { PG *pg = context< RecoveryMachine >().pg; - pg->osd->send_message_osd_cluster( - pg->primary.osd, - new MBackfillReserve( - MBackfillReserve::GRANT, - spg_t(pg->info.pgid.pgid, pg->primary.shard), - pg->get_osdmap()->get_epoch()), - pg->get_osdmap()->get_epoch()); - return transit(); + + double ratio, max_ratio; + if (g_conf->osd_debug_reject_backfill_probability > 0 && + (rand()%1000 < (g_conf->osd_debug_reject_backfill_probability*1000.0))) { + dout(10) << "backfill reservation rejected after reservation: " + << "failure injection" << dendl; + pg->osd->remote_reserver.cancel_reservation(pg->info.pgid); + post_event(RemoteReservationRejected()); + return discard_event(); + } else if (pg->osd->too_full_for_backfill(&ratio, &max_ratio) && + !pg->cct->_conf->osd_debug_skip_full_check_in_backfill_reservation) { + dout(10) << "backfill reservation rejected after reservation: full ratio is " + << ratio << ", which is greater than max allowed ratio " + << max_ratio << dendl; + pg->osd->remote_reserver.cancel_reservation(pg->info.pgid); + post_event(RemoteReservationRejected()); + return discard_event(); + } else { + pg->osd->send_message_osd_cluster( + pg->primary.osd, + new MBackfillReserve( + MBackfillReserve::GRANT, + spg_t(pg->info.pgid.pgid, pg->primary.shard), + pg->get_osdmap()->get_epoch()), + pg->get_osdmap()->get_epoch()); + return transit(); + } } boost::statechart::result -- 2.39.5