From: Yan, Zheng Date: Wed, 17 Oct 2018 09:22:47 +0000 (+0800) Subject: mds: flush dirty dirfrags that weren't logged when deactivating mds X-Git-Tag: v13.2.3~38^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fdd4cf491fadad66172ef6a7440bdec9c67bcbf9;p=ceph.git mds: flush dirty dirfrags that weren't logged when deactivating mds CDir::log_mark_dirty() may mark dirfrag dirty, without journal event. Signed-off-by: "Yan, Zheng" (cherry picked from commit 68b6073af92595da92c0032e814a2bb3d3cba5cd) Signed-off-by: Jonathan Brielmaier --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 94fbd5b6d8c2..f09f807d6243 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -7800,11 +7800,14 @@ bool MDCache::shutdown_pass() // Fully trim the log so that all objects in cache are clean and may be // trimmed by a future MDCache::trim. Note that MDSRank::tick does not // trim the log such that the cache eventually becomes clean. - if (mds->mdlog->get_num_segments() > 0 && - mds->mdlog->get_current_segment()->num_events > 1) { - // current segment contains events other than subtreemap - mds->mdlog->start_new_segment(); - mds->mdlog->flush(); + if (mds->mdlog->get_num_segments() > 0) { + auto ls = mds->mdlog->get_current_segment(); + if (ls->num_events > 1 || !ls->dirty_dirfrags.empty()) { + // Current segment contains events other than subtreemap or + // there are dirty dirfrags (see CDir::log_mark_dirty()) + mds->mdlog->start_new_segment(); + mds->mdlog->flush(); + } } mds->mdlog->trim_all(); if (mds->mdlog->get_num_segments() > 1) {