From: Yehuda Sadeh Date: Mon, 11 Jun 2012 22:09:00 +0000 (-0700) Subject: rgw: usage log cleanups X-Git-Tag: v0.48argonaut~80^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9a1ea4baf8207eb9db8167f7de00ac72c532932f;p=ceph.git rgw: usage log cleanups Also, recalc_round_timestamp should be done under lock. Signed-off-by: Yehuda Sadeh --- diff --git a/src/include/utime.h b/src/include/utime.h index 6953a9bcf635..f88c9290a651 100644 --- a/src/include/utime.h +++ b/src/include/utime.h @@ -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); diff --git a/src/rgw/rgw_log.cc b/src/rgw/rgw_log.cc index b83ea8892378..1cd91b59cd36 100644 --- a/src/rgw/rgw_log.cc +++ b/src/rgw/rgw_log.cc @@ -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);