From: Jianpeng Ma Date: Fri, 11 Sep 2015 08:02:31 +0000 (+0800) Subject: mds: For journal, set write iohint flags. X-Git-Tag: v9.1.0~101^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=645f3e9082f7fba26d649e7ecb8ea74a071633a3;p=ceph.git mds: For journal, set write iohint flags. For rank, if there is a standby replay rank, we don't use fadvise_dontneed for write ops. Except this case, we use fadvise_dontneed for write ops. Signed-off-by: Jianpeng Ma --- diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 696846980f4d..396170ef7ae5 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -80,6 +80,11 @@ void MDLog::create_logger() g_ceph_context->get_perfcounters_collection()->add(logger); } +void MDLog::set_write_iohint(unsigned iohint_flags) +{ + journaler->set_write_iohint(iohint_flags); +} + class C_MDL_WriteError : public MDSIOContextBase { protected: MDLog *mdlog; diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index c7d42bc999a3..c8f9e70f4c28 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -179,7 +179,7 @@ public: // replay state map > pending_exports; - + void set_write_iohint(unsigned iohint_flags); public: MDLog(MDSRank *m) : mds(m), diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 715bf832ec03..fe4643f6b3bd 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1588,6 +1588,25 @@ void MDSRankDispatcher::handle_mds_map( set_osd_epoch_barrier(osd_epoch); } + if (is_active()) { + bool found = false; + MDSMap::mds_info_t info = mdsmap->get_info(whoami); + + for (map::const_iterator p = mdsmap->get_mds_info().begin(); + p != mdsmap->get_mds_info().end(); + ++p) { + if (p->second.state == MDSMap::STATE_STANDBY_REPLAY && + (p->second.standby_for_rank == whoami ||(info.name.length() && p->second.standby_for_name == info.name))) { + found = true; + break; + } + if (found) + mdlog->set_write_iohint(0); + else + mdlog->set_write_iohint(CEPH_OSD_OP_FLAG_FADVISE_DONTNEED); + } + } + mdcache->notify_mdsmap_changed(); }