]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: For journal, set write iohint flags. 5644/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 11 Sep 2015 08:02:31 +0000 (16:02 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Fri, 11 Sep 2015 08:02:31 +0000 (16:02 +0800)
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 <jianpeng.ma@intel.com>
src/mds/MDLog.cc
src/mds/MDLog.h
src/mds/MDSRank.cc

index 696846980f4d1d6aecfdf0ffde6c1605d4f95f5e..396170ef7ae50b9ec38fff5e7d566fb08eaca541 100644 (file)
@@ -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;
index c7d42bc999a3095210c09625bc17b252d8d3a68e..c8f9e70f4c282c91922dbcb9e8a9137eb83ddb01 100644 (file)
@@ -179,7 +179,7 @@ public:
   // replay state
   map<inodeno_t, set<inodeno_t> >   pending_exports;
 
-
+  void set_write_iohint(unsigned iohint_flags);
 
 public:
   MDLog(MDSRank *m) : mds(m),
index 715bf832ec0307c60adb989fb5c9cbc03be308ce..fe4643f6b3bdc11732ad02aebbebeeb1074e91fe 100644 (file)
@@ -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<mds_gid_t,MDSMap::mds_info_t>::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();
 }