]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: journal EImportFinish after adjusting subtree auth
authorYan, Zheng <zheng.z.yan@intel.com>
Wed, 7 May 2014 02:54:07 +0000 (10:54 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Sun, 18 May 2014 04:44:24 +0000 (12:44 +0800)
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 <zheng.z.yan@intel.com>
src/mds/MDLog.cc
src/mds/Migrator.cc

index c224695671bf2e5d1da0dabbe815864f7ed5f78a..7b4ba13f223ad14c9527b55fa905de473c16fd1d 100644 (file)
@@ -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) {
index 9ba5bcdb8a31f265499287f3195d7e318f0a0a18..11475846d996cb98c6e85d7cbc40058345f17467 100644 (file)
@@ -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