From: Yan, Zheng Date: Fri, 11 Apr 2014 01:43:59 +0000 (+0800) Subject: mds: finish table servers recovery after creating newfs X-Git-Tag: v0.80-rc1~51^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7077438be98671cff450daea8601bdf8593fbb1f;p=ceph.git mds: finish table servers recovery after creating newfs Fixes: #8054 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 2473ff0eb1fd..15af84f840df 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(); @@ -1199,12 +1200,10 @@ void MDS::boot_create() dout(10) << "boot_create creating fresh anchortable" << dendl; anchorserver->reset(); anchorserver->save(fin.new_sub()); - anchorserver->handle_mds_recovery(whoami); dout(10) << "boot_create creating fresh snaptable" << dendl; snapserver->reset(); snapserver->save(fin.new_sub()); - snapserver->handle_mds_recovery(whoami); } assert(g_conf->mds_kill_create_at != 1); @@ -1564,7 +1563,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 +1578,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();