From 968c6c0c9408b33904041e5ddbd9ea738e831713 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 2 Apr 2013 08:58:35 -0700 Subject: [PATCH] mds: trigger tableserver active/recovery hook even for self The tableserver now sends a READY message to clients when they go active; we need to do this even for our own local tableclients, or else they do not initialize and hang on first use after bringing up a fresh cluster. Signed-off-by: Sage Weil Reviewed-by: Greg Farnum --- src/mds/MDS.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 99b14d963ea91..43618b8f1db86 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1036,8 +1036,7 @@ void MDS::handle_mds_map(MMDSMap *m) mdsmap->get_mds_set(active, MDSMap::STATE_ACTIVE); mdsmap->get_mds_set(active, MDSMap::STATE_CLIENTREPLAY); for (set::iterator p = active.begin(); p != active.end(); ++p) - if (*p != whoami && // not me - oldactive.count(*p) == 0) // newly so? + if (oldactive.count(*p) == 0) // newly so? handle_mds_recovery(*p); } @@ -1533,19 +1532,26 @@ void MDS::recovery_done() mdcache->populate_mydir(); } +// NOTE: called when any mds becomes active (even after creation) void MDS::handle_mds_recovery(int who) { dout(5) << "handle_mds_recovery mds." << who << dendl; - mdcache->handle_mds_recovery(who); + if (who != whoami) { + mdcache->handle_mds_recovery(who); + } + // NOTE: trigger this even for self, so that we nudge the + // client side. if (mdsmap->get_tableserver() == whoami) { anchorserver->handle_mds_recovery(who); snapserver->handle_mds_recovery(who); } - queue_waiters(waiting_for_active_peer[who]); - waiting_for_active_peer.erase(who); + if (who != whoami) { + queue_waiters(waiting_for_active_peer[who]); + waiting_for_active_peer.erase(who); + } } void MDS::handle_mds_failure(int who) -- 2.39.5