From 2452ef440e615e92fe0f6730fe0fa20f99e599c4 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Tue, 14 Jun 2011 12:37:35 -0700 Subject: [PATCH] common/Clock: add deglobalized clock stuff Add clock functions which don't use globals. Remove Clock::recent_now. Signed-off-by: Colin McCabe --- src/common/Clock.cc | 40 +++++++++++++++++++++++++++++++++------- src/common/Clock.h | 33 +++++++++------------------------ src/mds/CInode.cc | 2 +- src/mds/CInode.h | 2 +- src/mds/Locker.cc | 4 ++-- 5 files changed, 46 insertions(+), 35 deletions(-) diff --git a/src/common/Clock.cc b/src/common/Clock.cc index 88a44a43dd1da..b303303852067 100644 --- a/src/common/Clock.cc +++ b/src/common/Clock.cc @@ -14,9 +14,28 @@ #include "common/config.h" -#include "Clock.h" +#include "common/Clock.h" -// public +#include + +utime_t ceph_clock_now(CephContext *cct) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + utime_t n(&tv); + n += cct->_conf->clock_offset; + return n; +} + +time_t ceph_clock_gettime(CephContext *cct) +{ + time_t ret = time(NULL); + ret += ((time_t)cct->_conf->clock_offset); + return ret; +} + +// old global clock stuff +// TODO: remove Clock g_clock; Clock::Clock() { @@ -25,15 +44,22 @@ Clock::Clock() { Clock::~Clock() { } +void Clock::make_timespec(utime_t& t, struct timespec *ts) { + utime_t time = t; + + memset(ts, 0, sizeof(*ts)); + ts->tv_sec = time.sec(); + ts->tv_nsec = time.nsec(); +} + utime_t Clock::now() { struct timeval tv; gettimeofday(&tv, NULL); utime_t n(&tv); n += g_conf->clock_offset; - if (n < last) { - //derr << "WARNING: clock jumped backwards from " << last << " to " << n << dendl; - n = last; // clock jumped backwards! - } else - last = n; return n; } + +time_t Clock::gettime() { + return now().sec(); +} diff --git a/src/common/Clock.h b/src/common/Clock.h index a1ca17d40ba33..92054490ce18d 100644 --- a/src/common/Clock.h +++ b/src/common/Clock.h @@ -15,39 +15,24 @@ #ifndef CEPH_CLOCK_H #define CEPH_CLOCK_H -#include -#include -#include +#include "include/utime.h" + #include -#include "include/utime.h" +struct timespec; +struct utime_t; -class Clock { - protected: - utime_t last; +extern utime_t ceph_clock_now(CephContext *cct); +extern time_t ceph_clock_gettime(CephContext *cct); +class Clock { public: Clock(); ~Clock(); utime_t now(); - - utime_t recent_now() { - return last; - } - - void make_timespec(utime_t& t, struct timespec *ts) { - utime_t time = t; - - memset(ts, 0, sizeof(*ts)); - ts->tv_sec = time.sec(); - ts->tv_nsec = time.nsec(); - } - - // absolute time - time_t gettime() { - return now().sec(); - } + void make_timespec(utime_t& t, struct timespec *ts); + time_t gettime(); }; extern Clock g_clock; diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 5276929266eac..b9bcb8eb14e03 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -2397,7 +2397,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, cap->issue_norevoke(issue); issue = cap->pending(); cap->set_last_issue(); - cap->set_last_issue_stamp(g_clock.recent_now()); + cap->set_last_issue_stamp(g_clock.now()); e.cap.caps = issue; e.cap.wanted = cap->wanted(); e.cap.cap_id = cap->get_cap_id(); diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 3b4a145e6fff2..f94f89516883c 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -913,7 +913,7 @@ public: cap->reset_seq(); } cap->set_cap_id(icr.cap_id); - cap->set_last_issue_stamp(g_clock.recent_now()); + cap->set_last_issue_stamp(g_clock.now()); return cap; } void clear_client_caps_after_export() { diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index f496ef0cbf93b..f5b559d84a97b 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1647,7 +1647,7 @@ void Locker::request_inode_file_caps(CInode *in) if (wanted != in->replica_caps_wanted) { if (wanted == 0) { - if (in->replica_caps_wanted_keep_until > g_clock.recent_now()) { + if (in->replica_caps_wanted_keep_until > g_clock.now()) { // ok, release them finally! in->replica_caps_wanted_keep_until.sec_ref() = 0; dout(7) << "request_inode_file_caps " << ccap_string(wanted) @@ -1657,7 +1657,7 @@ void Locker::request_inode_file_caps(CInode *in) << dendl; } else if (in->replica_caps_wanted_keep_until.sec() == 0) { - in->replica_caps_wanted_keep_until = g_clock.recent_now(); + in->replica_caps_wanted_keep_until = g_clock.now(); in->replica_caps_wanted_keep_until.sec_ref() += 2; dout(7) << "request_inode_file_caps " << ccap_string(wanted) -- 2.39.5