From 08b79ea8885d054df49fbb99e28d3de172e20a77 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 7 May 2014 10:54:07 +0800 Subject: [PATCH] mds: journal EImportFinish after adjusting subtree auth Submitting EImportFinish may journal an extra ESubtreeMap as side effect. The ESubtreeMap should reflects subtree state after import is finished. Signed-off-by: Yan, Zheng --- src/mds/MDLog.cc | 2 +- src/mds/Migrator.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index c224695671bf..7b4ba13f223a 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -222,7 +222,7 @@ void MDLog::submit_entry(LogEvent *le, Context *c) if (le->get_type() == EVENT_SUBTREEMAP || (le->get_type() == EVENT_IMPORTFINISH && mds->is_resolve())) { // avoid infinite loop when ESubtreeMap is very large. - // don not insert ESubtreeMap among EImportFinish events that finish + // do not insert ESubtreeMap among EImportFinish events that finish // disambiguate imports. Because the ESubtreeMap reflects the subtree // state when all EImportFinish events are replayed. } else if (journaler->get_write_pos()/period != last_seg/period) { diff --git a/src/mds/Migrator.cc b/src/mds/Migrator.cc index 9ba5bcdb8a31..11475846d996 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -2628,10 +2628,11 @@ void Migrator::import_finish(CDir *dir, bool notify, bool last) MutationRef mut = it->second.mut; import_state.erase(it); - mds->mdlog->start_submit_entry(new EImportFinish(dir, true)); - // adjust auth, with possible subtree merge. cache->adjust_subtree_auth(dir, mds->get_nodeid()); + + mds->mdlog->start_submit_entry(new EImportFinish(dir, true)); + cache->try_subtree_merge(dir); // NOTE: this may journal subtree_map as sideffect // process delayed expires -- 2.47.3