- lease length heuristics
- mds lock last_change stamp?
-- can we get rid of the dirlock remote auth_pin weirdness on subtree roots?
+- handle slow client reconnect (i.e. after mds has gone active)
- fix reconnect/rejoin open file weirdness
- get rid of C*Discover objects for replicate_to .. encode to bufferlists directly?
-- failure during reconnect vs clientmap.
-
+- can we get rid of the dirlock remote auth_pin weirdness on subtree roots?
- anchor_destroy needs to xlock linklock.. which means it needs a Mutation wrapper?
- ... when it gets a caller.. someday..
*/
void MDCache::identify_files_to_recover()
{
+ /* no. we may have failed a reconnect, then crashed before recovering all sizes..
if (!mds->server->failed_reconnects) {
dout(10) << "identify_files_to_recover -- all clients reconnected, nothing to do" << dendl;
return;
}
+ */
dout(10) << "identify_files_to_recover" << dendl;
for (hash_map<inodeno_t,CInode*>::iterator p = inode_map.begin();
}
-void Server::client_reconnect_failure(int from)
-{
- dout(5) << "client_reconnect_failure on client" << from << dendl;
- if (mds->is_reconnect() &&
- client_reconnect_gather.count(from)) {
- failed_reconnects++;
- client_reconnect_gather.erase(from);
- if (client_reconnect_gather.empty())
- reconnect_gather_finish();
- }
-}
-
void Server::reconnect_gather_finish()
{
dout(7) << "reconnect_gather_finish. failed on " << failed_reconnects << " clients" << dendl;
for (set<int>::iterator p = client_reconnect_gather.begin();
p != client_reconnect_gather.end();
p++) {
+ Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(*p));
+ dout(1) << "reconnect gave up on " << session->inst << dendl;
+
+ /* no, we need to respect g_conf.mds_session_autoclose
+ // since we are reconnecting, cheat a bit and don't project anything.
+ mds->sessionmap.projected++;
+ mds->sessionmap.version++;
+ mdlog->submit_entry(new ESession(session->inst, false, mds->sessionmap.version));
+ mds->messenger->mark_down(session->inst.addr);
+ */
+
failed_reconnects++;
- dout(1) << "reconnect gave up on "
- << mds->sessionmap.get_inst(entity_name_t::CLIENT(*p))
- << dendl;
}
client_reconnect_gather.clear();
reconnect_gather_finish();
/*
- * send generic response (just and error code)
+ * send generic response (just an error code)
*/
void Server::reply_request(MDRequest *mdr, int r, CInode *tracei, CDentry *tracedn)
{