Add clock functions which don't use globals. Remove Clock::recent_now.
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
#include "common/config.h"
-#include "Clock.h"
+#include "common/Clock.h"
-// public
+#include <time.h>
+
+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() {
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();
+}
#ifndef CEPH_CLOCK_H
#define CEPH_CLOCK_H
-#include <iomanip>
-#include <iostream>
-#include <sys/time.h>
+#include "include/utime.h"
+
#include <time.h>
-#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;
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();
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() {
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)
<< 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)