_collect_and_send_global_metrics = cct->_conf.get_val<bool>(
"client_collect_and_send_global_metrics");
+ mount_timeout = cct->_conf.get_val<std::chrono::seconds>(
+ "client_mount_timeout");
+
+ caps_release_delay = cct->_conf.get_val<std::chrono::seconds>(
+ "client_caps_release_delay");
+
if (cct->_conf->client_acl_type == "posix_acl")
acl_type = POSIX_ACL;
// and timestamp
request->op_stamp = ceph_clock_now();
+ request->created = ceph::coarse_mono_clock::now();
// make note
mds_requests[tid] = request->get();
void Client::cap_delay_requeue(Inode *in)
{
ldout(cct, 10) << __func__ << " on " << *in << dendl;
- in->hold_caps_until = ceph_clock_now();
- in->hold_caps_until += cct->_conf->client_caps_release_delay;
+
+ in->hold_caps_until = ceph::coarse_mono_clock::now() + caps_release_delay;
delayed_list.push_back(&in->delay_cap_item);
}
}
client_lock.unlock();
- int r = monclient->authenticate(cct->_conf->client_mount_timeout);
+ int r = monclient->authenticate(std::chrono::duration<double>(mount_timeout).count());
client_lock.lock();
if (r < 0) {
return r;
if (!mount_aborted && mdsmap->get_epoch()) {
// renew caps?
- utime_t el = ceph_clock_now() - last_cap_renew;
- if (unlikely(el > mdsmap->get_session_timeout() / 3.0))
+ auto el = ceph::coarse_mono_clock::now() - last_cap_renew;
+ if (unlikely(utime_t(el) > mdsmap->get_session_timeout() / 3.0))
renew_caps();
flush_cap_releases();
{
ldout(cct, 20) << "tick" << dendl;
- utime_t now = ceph_clock_now();
+ auto now = ceph::coarse_mono_clock::now();
/*
* If the mount() is not finished
if (is_mounting() && !mds_requests.empty()) {
MetaRequest *req = mds_requests.begin()->second;
- if (req->op_stamp + cct->_conf->client_mount_timeout < now) {
+ if (req->created + mount_timeout < now) {
req->abort(-CEPHFS_ETIMEDOUT);
if (req->caller_cond) {
req->kick = true;
trim_cache(true);
if (blocklisted && (is_mounted() || is_unmounting()) &&
- last_auto_reconnect + 30 * 60 < now &&
+ last_auto_reconnect + std::chrono::seconds(30 * 60) < now &&
cct->_conf.get_val<bool>("client_reconnect_stale")) {
messenger->client_reset();
fd_gen++; // invalidate open files
void Client::renew_caps()
{
ldout(cct, 10) << "renew_caps()" << dendl;
- last_cap_renew = ceph_clock_now();
+ last_cap_renew = ceph::coarse_mono_clock::now();
for (auto &p : mds_sessions) {
ldout(cct, 15) << "renew_caps requesting from mds." << p.first << dendl;
"client_oc_max_dirty",
"client_oc_target_dirty",
"client_oc_max_dirty_age",
+ "client_caps_release_delay",
+ "client_mount_timeout",
NULL
};
return keys;
if (changed.count("client_collect_and_send_global_metrics")) {
_collect_and_send_global_metrics = cct->_conf.get_val<bool>(
"client_collect_and_send_global_metrics");
+ }
+ if (changed.count("client_caps_release_delay")) {
+ caps_release_delay = cct->_conf.get_val<std::chrono::seconds>(
+ "client_caps_release_delay");
+ }
+ if (changed.count("client_mount_timeout")) {
+ mount_timeout = cct->_conf.get_val<std::chrono::seconds>(
+ "client_mount_timeout");
}
}
Finisher async_ino_releasor;
Finisher objecter_finisher;
- utime_t last_cap_renew;
+ ceph::coarse_mono_time last_cap_renew;
CommandHook m_command_hook;
ceph::unordered_map<inodeno_t,SnapRealm*> snap_realms;
std::map<std::string, std::string> metadata;
- utime_t last_auto_reconnect;
-
+ ceph::coarse_mono_time last_auto_reconnect;
+ std::chrono::seconds caps_release_delay, mount_timeout;
// trace generation
ofstream traceout;
#define I_ERROR_FILELOCK (1 << 5)
struct Inode : RefCountedObject {
+ ceph::coarse_mono_time hold_caps_until;
Client *client;
// -- the actual inode --
int cache_gen = 0;
int snap_caps = 0;
int snap_cap_refs = 0;
- utime_t hold_caps_until;
xlist<Inode*>::item delay_cap_item, dirty_cap_item, flushing_cap_item;
SnapRealm *snaprealm = 0;
Dentry *_old_dentry; //associated with path2
int abort_rc;
public:
+ ceph::coarse_mono_time created = ceph::coarse_mono_clock::zero();
uint64_t tid;
utime_t op_stamp;
ceph_mds_request_head head;
OPTION(client_cache_size, OPT_INT)
OPTION(client_cache_mid, OPT_FLOAT)
OPTION(client_use_random_mds, OPT_BOOL)
-OPTION(client_mount_timeout, OPT_DOUBLE)
OPTION(client_trace, OPT_STR)
OPTION(client_readahead_min, OPT_LONGLONG) // readahead at _least_ this much.
OPTION(client_readahead_max_bytes, OPT_LONGLONG) // default unlimited
OPTION(client_mount_gid, OPT_INT)
OPTION(client_notify_timeout, OPT_INT) // in seconds
OPTION(osd_client_watch_timeout, OPT_INT) // in seconds
-OPTION(client_caps_release_delay, OPT_INT) // in seconds
OPTION(client_quota_df, OPT_BOOL) // use quota for df on subdir mounts
OPTION(client_oc, OPT_BOOL)
OPTION(client_oc_size, OPT_INT) // MB * n
.set_default(false)
.set_description("issue new requests to a random active MDS"),
- Option("client_mount_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
- .set_default(300.0)
+ Option("client_mount_timeout", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
+ .set_default(300)
.set_description("timeout for mounting CephFS (seconds)"),
Option("client_tick_interval", Option::TYPE_SECS, Option::LEVEL_DEV)
.set_default(30)
.set_description(""),
- Option("client_caps_release_delay", Option::TYPE_INT, Option::LEVEL_DEV)
+ Option("client_caps_release_delay", Option::TYPE_SECS, Option::LEVEL_DEV)
.set_default(5)
.set_description(""),
goto out;
}
- err = monclient.authenticate(conf->client_mount_timeout);
+ err = monclient.authenticate(std::chrono::duration<double>(conf.get_val<std::chrono::seconds>("client_mount_timeout")).count());
if (err) {
ldout(cct, 0) << conf->name << " authentication error " << cpp_strerror(-err) << dendl;
shutdown();
if (r < 0) {
return r;
}
- r = authenticate(cct->_conf->client_mount_timeout);
+ r = authenticate(std::chrono::duration<double>(cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout")).count());
if (r == -ETIMEDOUT) {
shutdown();
continue;
int wait_for_reply(double timeout = 0.0) {
std::unique_lock locker{lock};
if (timeout <= 0) {
- timeout = cct->_conf->client_mount_timeout;
+ timeout = std::chrono::duration<double>(cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout")).count();
}
done = false;
if (ping_recvd_cond.wait_for(locker,
if (err) {
throw boost::system::system_error(ceph::to_error_code(err));
}
- err = monclient.authenticate(cct->_conf->client_mount_timeout);
+ err = monclient.authenticate(std::chrono::duration<double>(cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout")).count());
if (err) {
throw boost::system::system_error(ceph::to_error_code(err));
}
return r;
}
- r = m_monc->authenticate(m_cct->_conf->client_mount_timeout);
+ r = m_monc->authenticate(std::chrono::duration<double>(m_cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout")).count());
if (r < 0) {
derr << ": failed to authenticate to monitor: " << cpp_strerror(r) << dendl;
return r;