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 ca1b0b70e98..686577dcb43 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12739,8 +12739,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 9ff99d541c6..9e6a1448ab3 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)