From f6c20730c16a7632061639dd83be523fc6a9a44f Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Fri, 11 Apr 2014 09:43:59 +0800 Subject: [PATCH] mds: finish table servers recovery after creating newfs Fixes: #8054 Signed-off-by: Yan, Zheng --- src/mds/MDS.cc | 10 +++++++--- src/mds/MDS.h | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 2473ff0eb1fd..b4cce0824c6a 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -994,9 +994,10 @@ void MDS::handle_mds_map(MMDSMap *m) } else { // did i just recover? if ((is_active() || is_clientreplay()) && - (oldstate == MDSMap::STATE_REJOIN || + (oldstate == MDSMap::STATE_CREATING || + oldstate == MDSMap::STATE_REJOIN || oldstate == MDSMap::STATE_RECONNECT)) - recovery_done(); + recovery_done(oldstate); if (is_active()) { active_start(); @@ -1564,7 +1565,7 @@ void MDS::active_start() finish_contexts(g_ceph_context, waiting_for_active); // kick waiters } -void MDS::recovery_done() +void MDS::recovery_done(int oldstate) { dout(1) << "recovery_done -- successful recovery!" << dendl; assert(is_clientreplay() || is_active()); @@ -1579,6 +1580,9 @@ void MDS::recovery_done() snapserver->finish_recovery(active); } + if (oldstate == MDSMap::STATE_CREATING) + return; + mdcache->start_recovered_truncates(); mdcache->do_file_recover(); diff --git a/src/mds/MDS.h b/src/mds/MDS.h index a1e1c58c83f9..1cd6096b46d1 100644 --- a/src/mds/MDS.h +++ b/src/mds/MDS.h @@ -389,7 +389,7 @@ class MDS : public Dispatcher { void rejoin_joint_start(); void rejoin_start(); void rejoin_done(); - void recovery_done(); + void recovery_done(int oldstate); void clientreplay_start(); void clientreplay_done(); void active_start(); -- 2.47.3