]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: usage log cleanups
authorYehuda Sadeh <yehuda@inktank.com>
Mon, 11 Jun 2012 22:09:00 +0000 (15:09 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Mon, 11 Jun 2012 22:09:00 +0000 (15:09 -0700)
Also, recalc_round_timestamp should be done under lock.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/include/utime.h
src/rgw/rgw_log.cc

index 6953a9bcf63544a6a0ad8a38790e22e5ae42345d..f88c9290a6511b2d839095bd35b8d766388176a8 100644 (file)
@@ -99,6 +99,25 @@ public:
     tv.tv_nsec = t->tv_nsec;
   }
 
+  utime_t round_to_minute() {
+    struct tm bdt;
+    time_t tt = sec();
+    gmtime_r(&tt, &bdt);
+    bdt.tm_sec = 0;
+    tt = mktime(&bdt);
+    return utime_t(tt, 0);
+  }
+
+  utime_t round_to_hour() {
+    struct tm bdt;
+    time_t tt = sec();
+    gmtime_r(&tt, &bdt);
+    bdt.tm_sec = 0;
+    bdt.tm_min = 0;
+    tt = mktime(&bdt);
+    return utime_t(tt, 0);
+  }
+
   // cast to double
   operator double() {
     return (double)sec() + ((double)nsec() / 1000000000.0L);
index b83ea889237842253a5f45b4ac3cb0c7edda1520..1cd91b59cd36e3a871d82dcdee0955b7c1b40128 100644 (file)
@@ -87,10 +87,9 @@ class UsageLogger {
   utime_t round_timestamp;
 
   class C_UsageLogTimeout : public Context {
-    CephContext *cct;
     UsageLogger *logger;
   public:
-    C_UsageLogTimeout(CephContext *_cct, UsageLogger *_l) : cct(_cct), logger(_l) {}
+    C_UsageLogTimeout(UsageLogger *_l) : logger(_l) {}
     void finish(int r) {
       logger->flush();
       logger->set_timer();
@@ -98,7 +97,7 @@ class UsageLogger {
   };
 
   void set_timer() {
-    timer.add_event_after(cct->_conf->rgw_usage_log_tick_interval, new C_UsageLogTimeout(cct, this));
+    timer.add_event_after(cct->_conf->rgw_usage_log_tick_interval, new C_UsageLogTimeout(this));
   }
 public:
 
@@ -118,20 +117,14 @@ public:
   }
 
   void recalc_round_timestamp(utime_t& ts) {
-    struct tm bdt;
-    time_t tt = ts.sec();
-    gmtime_r(&tt, &bdt);
-    bdt.tm_sec = 0;
-    bdt.tm_min = 0;
-    tt = mktime(&bdt);
-    round_timestamp = utime_t(tt, 0);
+    round_timestamp = ts.round_to_hour();
   }
 
   void insert(utime_t& timestamp, rgw_usage_log_entry& entry) {
+    lock.Lock();
     if (timestamp.sec() > round_timestamp + 3600)
       recalc_round_timestamp(timestamp);
     entry.epoch = round_timestamp.sec();
-    lock.Lock();
     bool account;
     rgw_user_bucket ub(entry.owner, entry.bucket);
     usage_map[ub].insert(round_timestamp, entry, &account);