From e0bbc704676ef4aed510daff075ef63c9e73b7b3 Mon Sep 17 00:00:00 2001 From: Henrik Korkuc Date: Sun, 19 Feb 2017 11:44:20 +0200 Subject: [PATCH] client/Client.cc: add feature to reconnect client after MDS reset Client.cc marks session as stale instead of reconecting after received reset from MDS. On MDS side session is closed so MDS is ignoring cap renew. This adds option to reconnect stale client sessions instead of just marking sessions stale. Fixes: http://tracker.ceph.com/issues/18757 Signed-off-by: Henrik Korkuc --- doc/cephfs/client-config-ref.rst | 6 ++++++ src/client/Client.cc | 12 ++++++++++-- src/common/config_opts.h | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/cephfs/client-config-ref.rst b/doc/cephfs/client-config-ref.rst index a789a6d4d16..ce5562fae40 100644 --- a/doc/cephfs/client-config-ref.rst +++ b/doc/cephfs/client-config-ref.rst @@ -147,6 +147,12 @@ :Type: Integer :Default: ``131072`` (128KB) +``client_reconnect_stale`` + +:Description: Automatically reconnect stale session. +:Type: Boolean +:Default: ``false`` + ``client_snapdir`` :Description: Set the snapshot directory name. diff --git a/src/client/Client.cc b/src/client/Client.cc index 8d711553fc8..e336d1611e5 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12708,8 +12708,16 @@ void Client::ms_handle_remote_reset(Connection *con) break; case MetaSession::STATE_OPEN: - ldout(cct, 1) << "reset from mds we were open; mark session as stale" << dendl; - s->state = MetaSession::STATE_STALE; + { + const md_config_t *conf = cct->_conf; + if (conf->client_reconnect_stale) { + ldout(cct, 1) << "reset from mds we were open; close mds session for reconnect" << dendl; + _closed_mds_session(s); + } else { + ldout(cct, 1) << "reset from mds we were open; mark session as stale" << dendl; + s->state = MetaSession::STATE_STALE; + } + } break; case MetaSession::STATE_NEW: diff --git a/src/common/config_opts.h b/src/common/config_opts.h index c9a9beefff6..8794f50c8b9 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -423,6 +423,7 @@ OPTION(client_trace, OPT_STR, "") OPTION(client_readahead_min, OPT_LONGLONG, 128*1024) // readahead at _least_ this much. OPTION(client_readahead_max_bytes, OPT_LONGLONG, 0) // default unlimited OPTION(client_readahead_max_periods, OPT_LONGLONG, 4) // as multiple of file layout period (object size * num stripes) +OPTION(client_reconnect_stale, OPT_BOOL, false) // automatically reconnect stale session OPTION(client_snapdir, OPT_STR, ".snap") OPTION(client_mountpoint, OPT_STR, "/") OPTION(client_mount_uid, OPT_INT, -1) -- 2.47.3