From 82f162c9e6d56decbd349f1588d72a02fcb2fdca Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 19 Jan 2017 21:18:02 -0600 Subject: [PATCH] mds/SessionMap: use pmore for loading sessions Keep the result size check for a while since older OSDs won't populate the pmore field for us. Eventually we can remove it. Signed-off-by: Sage Weil --- src/mds/SessionMap.cc | 15 ++++++++------- src/mds/SessionMap.h | 3 ++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index 3d2a5f4ba0bb4..4dd73cd54725a 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -90,12 +90,14 @@ public: int values_r; //< Return value from OMAP value read bufferlist header_bl; std::map session_vals; + bool more_session_vals = false; C_IO_SM_Load(SessionMap *cm, const bool f) : SessionMapIOContext(cm), first(f), header_r(0), values_r(0) {} void finish(int r) override { - sessionmap->_load_finish(r, header_r, values_r, first, header_bl, session_vals); + sessionmap->_load_finish(r, header_r, values_r, first, header_bl, session_vals, + more_session_vals); } }; } @@ -155,7 +157,8 @@ void SessionMap::_load_finish( int values_r, bool first, bufferlist &header_bl, - std::map &session_vals) + std::map &session_vals, + bool more_session_vals) { if (operation_r < 0) { derr << "_load_finish got " << cpp_strerror(operation_r) << dendl; @@ -210,7 +213,7 @@ void SessionMap::_load_finish( ceph_abort(); // Should be unreachable because damaged() calls respawn() } - if (session_vals.size() == g_conf->mds_sessionmap_keys_per_op) { + if (more_session_vals) { // Issue another read if we're not at the end of the omap const std::string last_key = session_vals.rbegin()->first; dout(10) << __func__ << ": continue omap load from '" @@ -219,9 +222,8 @@ void SessionMap::_load_finish( object_locator_t oloc(mds->mdsmap->get_metadata_pool()); C_IO_SM_Load *c = new C_IO_SM_Load(this, false); ObjectOperation op; -#warning fixme use the pmore arg op.omap_get_vals(last_key, "", g_conf->mds_sessionmap_keys_per_op, - &c->session_vals, nullptr, &c->values_r); + &c->session_vals, &c->more_session_vals, &c->values_r); mds->objecter->read(oid, oloc, op, CEPH_NOSNAP, NULL, 0, new C_OnFinisher(c, mds->finisher)); } else { @@ -263,9 +265,8 @@ void SessionMap::load(MDSInternalContextBase *onload) ObjectOperation op; op.omap_get_header(&c->header_bl, &c->header_r); -#warning use the pmore arg op.omap_get_vals("", "", g_conf->mds_sessionmap_keys_per_op, - &c->session_vals, nullptr, &c->values_r); + &c->session_vals, &c->more_session_vals, &c->values_r); mds->objecter->read(oid, oloc, op, CEPH_NOSNAP, NULL, 0, new C_OnFinisher(c, mds->finisher)); } diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index d4f35083ac642..f594a6c6709cd 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -604,7 +604,8 @@ public: int values_r, bool first, bufferlist &header_bl, - std::map &session_vals); + std::map &session_vals, + bool more_session_vals); void load_legacy(); void _load_legacy_finish(int r, bufferlist &bl); -- 2.39.5