From 6f33e062b1d20836349485deb0670c5aad6939c3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 8 May 2008 11:09:32 -0700 Subject: [PATCH] mds: time out reconnect --- src/config.cc | 1 + src/config.h | 1 + src/mds/MDS.cc | 3 +++ src/mds/Server.cc | 17 +++++++++++++++++ src/mds/Server.h | 2 +- 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/config.cc b/src/config.cc index 7627bde52e5cd..1e7ccf828d889 100644 --- a/src/config.cc +++ b/src/config.cc @@ -286,6 +286,7 @@ md_config_t g_conf = { mds_cap_timeout: 100, // cap bits time out if client idle mds_session_autoclose: 300, // autoclose idle session mds_client_lease: 100, + mds_reconnect_timeout: 30, // seconds to wait for clients during mds restart mds_tick_interval: 5, diff --git a/src/config.h b/src/config.h index 8bec51d6697cf..d2b642caec8c3 100644 --- a/src/config.h +++ b/src/config.h @@ -188,6 +188,7 @@ struct md_config_t { float mds_cap_timeout; float mds_session_autoclose; float mds_client_lease; + float mds_reconnect_timeout; float mds_tick_interval; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index a12167695ae4a..cc4b14fe828a6 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -348,6 +348,9 @@ void MDS::tick() server->find_idle_sessions(); } + if (is_reconnect()) + server->reconnect_tick(); + if (is_active()) { balancer->tick(); } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 48c1c9a5340ca..96516c1941ef6 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -472,6 +472,23 @@ void Server::reconnect_gather_finish() mds->reconnect_done(); } +void Server::reconnect_tick() +{ + utime_t reconnect_end = reconnect_start; + reconnect_end += g_conf.mds_reconnect_timeout; + if (g_clock.now() >= reconnect_end && + !client_reconnect_gather.empty()) { + dout(10) << "reconnect timed out" << dendl; + for (set::iterator p = client_reconnect_gather.begin(); + p != client_reconnect_gather.end(); + p++) + dout(1) << "reconnect gave up on " + << mds->sessionmap.get_inst(entity_name_t::CLIENT(*p)) + << dendl; + client_reconnect_gather.clear(); + reconnect_gather_finish(); + } +} /******* diff --git a/src/mds/Server.h b/src/mds/Server.h index 58f5977478899..c950805036258 100644 --- a/src/mds/Server.h +++ b/src/mds/Server.h @@ -70,7 +70,7 @@ public: void process_reconnected_caps(); void client_reconnect_failure(int from); void reconnect_gather_finish(); - + void reconnect_tick(); // -- requests -- void handle_client_request(MClientRequest *m); -- 2.39.5