From: John Spray Date: Tue, 16 Dec 2014 20:48:45 +0000 (+0000) Subject: osdc: add public Objecter::osdmap_full_flag X-Git-Tag: v0.91~47^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09287fd666a5225b1b53ffef29ab6428d547bb48;p=ceph.git osdc: add public Objecter::osdmap_full_flag For the (now numerous) places where callers would like to check this without doing a verbose lock/unlock cycle. Signed-off-by: John Spray --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 3d813eef8f74..2647b83059c9 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -737,7 +737,7 @@ void Objecter::handle_osd_map(MOSDMap *m) } bool was_pauserd = osdmap->test_flag(CEPH_OSDMAP_PAUSERD); - bool was_full = osdmap_full_flag(); + bool was_full = _osdmap_full_flag(); bool was_pausewr = osdmap->test_flag(CEPH_OSDMAP_PAUSEWR) || was_full; list need_resend_linger; @@ -790,7 +790,7 @@ void Objecter::handle_osd_map(MOSDMap *m) } logger->set(l_osdc_map_epoch, osdmap->get_epoch()); - was_full = was_full || osdmap_full_flag(); + was_full = was_full || _osdmap_full_flag(); _scan_requests(homeless_session, skipped_map, was_full, need_resend, need_resend_linger, need_resend_command); @@ -839,7 +839,7 @@ void Objecter::handle_osd_map(MOSDMap *m) } bool pauserd = osdmap->test_flag(CEPH_OSDMAP_PAUSERD); - bool pausewr = osdmap->test_flag(CEPH_OSDMAP_PAUSEWR) || osdmap_full_flag(); + bool pausewr = osdmap->test_flag(CEPH_OSDMAP_PAUSEWR) || _osdmap_full_flag(); // was/is paused? if (was_pauserd || was_pausewr || pauserd || pausewr || osdmap->get_epoch() < epoch_barrier) { @@ -1429,7 +1429,7 @@ void Objecter::_maybe_request_map() { assert(rwlock.is_locked()); int flag = 0; - if (osdmap_full_flag() + if (_osdmap_full_flag() || osdmap->test_flag(CEPH_OSDMAP_PAUSERD) || osdmap->test_flag(CEPH_OSDMAP_PAUSEWR)) { ldout(cct, 10) << "_maybe_request_map subscribing (continuous) to next osd map (FULL flag is set)" << dendl; @@ -1844,7 +1844,7 @@ ceph_tid_t Objecter::_op_submit(Op *op, RWLock::Context& lc) ldout(cct, 10) << " paused read " << op << " tid " << last_tid.read() << dendl; op->target.paused = true; _maybe_request_map(); - } else if ((op->target.flags & CEPH_OSD_FLAG_WRITE) && osdmap_full_flag()) { + } else if ((op->target.flags & CEPH_OSD_FLAG_WRITE) && _osdmap_full_flag()) { ldout(cct, 0) << " FULL, paused modify " << op << " tid " << last_tid.read() << dendl; op->target.paused = true; _maybe_request_map(); @@ -2033,18 +2033,27 @@ bool Objecter::is_pg_changed( bool Objecter::target_should_be_paused(op_target_t *t) { bool pauserd = osdmap->test_flag(CEPH_OSDMAP_PAUSERD); - bool pausewr = osdmap->test_flag(CEPH_OSDMAP_PAUSEWR) || osdmap_full_flag(); + bool pausewr = osdmap->test_flag(CEPH_OSDMAP_PAUSEWR) || _osdmap_full_flag(); return (t->flags & CEPH_OSD_FLAG_READ && pauserd) || (t->flags & CEPH_OSD_FLAG_WRITE && pausewr) || (osdmap->get_epoch() < epoch_barrier); } +/** + * Locking public accessor for _osdmap_full_flag + */ +bool Objecter::osdmap_full_flag() const +{ + RWLock::RLocker rl(rwlock); + + return _osdmap_full_flag(); +} /** * Wrapper around osdmap->test_flag for special handling of the FULL flag. */ -bool Objecter::osdmap_full_flag() const +bool Objecter::_osdmap_full_flag() const { // Ignore the FULL flag if the caller has honor_osdmap_full return osdmap->test_flag(CEPH_OSDMAP_FULL) && honor_osdmap_full; diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index d74261a5e756..2af6abb96ef1 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -1560,6 +1560,7 @@ public: }; map osd_sessions; + bool osdmap_full_flag() const; private: map linger_ops; @@ -1599,7 +1600,7 @@ public: RECALC_OP_TARGET_OSD_DNE, RECALC_OP_TARGET_OSD_DOWN, }; - bool osdmap_full_flag() const; + bool _osdmap_full_flag() const; bool target_should_be_paused(op_target_t *op); int _calc_target(op_target_t *t, bool any_change=false);