From a3c30e38fba3a6a73505a65fd46f2d32f8e950c3 Mon Sep 17 00:00:00 2001 From: Deepika Upadhyay Date: Tue, 5 Nov 2024 14:04:43 +0530 Subject: [PATCH] test Signed-off-by: Deepika Upadhyay --- src/rgw/rgw_common.h | 1 + src/rgw/rgw_op.cc | 1 + src/rgw/rgw_rest.cc | 27 +++++++++++++++++++++++++++ src/rgw/rgw_rest.h | 1 + src/rgw/rgw_rest_swift.cc | 1 + 5 files changed, 31 insertions(+) diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index a8f6a1107a919..7a609ed738cc5 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1425,6 +1425,7 @@ struct RGWBucketEnt { size_t size; size_t size_rounded; ceph::real_time creation_time; + // ceph::real_time last_modified; uint64_t count; /* The placement_rule is necessary to calculate per-storage-policy statics diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 67829e6320a6e..639c202c65bdd 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2681,6 +2681,7 @@ void RGWListBuckets::execute(optional_yield y) global_stats.bytes_used += ent.size; global_stats.bytes_used_rounded += ent.size_rounded; global_stats.objects_count += ent.count; + last_modified += ent.last_modified; /* operator[] still can create a new entry for storage policy seen * for first time. */ diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index a202d5acf4e11..9870ad2c7bd37 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -477,6 +477,33 @@ std::string dump_time_to_str(const real_time& t) return timestr; } +static size_t dump_time_usec_impl(char (×tr)[TIME_BUF_SIZE], + const real_time t) +{ + const utime_t ut(t); + time_t secs = static_cast(ut.sec()); + + char buf[TIME_BUF_SIZE]; + struct tm result; + const struct tm * const tmp = gmtime_r(&secs, &result); + if (tmp == nullptr) { + return 0; + } + + if (strftime(buf, sizeof(buf), "%Y-%m-%dT%T", tmp) == 0) + return 0; + + return snprintf(timestr, sizeof(timestr), "%s.%06d", buf, (int)(ut.usec())); +} + +std::string dump_time_usec_to_str(const real_time& t) +{ + char timestr[TIME_BUF_SIZE]; + dump_time_usec_impl(timestr, t); + + return timestr; +} + void dump_last_modified(req_state *s, real_time t) { diff --git a/src/rgw/rgw_rest.h b/src/rgw/rgw_rest.h index 3abba0124a6ed..043c558247773 100644 --- a/src/rgw/rgw_rest.h +++ b/src/rgw/rgw_rest.h @@ -839,6 +839,7 @@ extern void dump_continue(req_state *s); extern void list_all_buckets_end(req_state *s); extern void dump_time(req_state *s, const char *name, real_time t); extern std::string dump_time_to_str(const real_time& t); +extern std::string dump_time_usec_to_str(const real_time& t); extern void dump_bucket_from_state(req_state *s); extern void dump_redirect(req_state *s, const std::string& redirect); extern bool is_valid_url(const char *url); diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 35c36d1ae1a66..66dd85300f331 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -361,6 +361,7 @@ void RGWListBuckets_ObjStore_SWIFT::dump_bucket_entry(const RGWBucketEnt& ent) if (need_stats) { s->formatter->dump_int("count", ent.count); s->formatter->dump_int("bytes", ent.size); + s->formatter->dump_string("last_modified", dump_time_usec_to_str(s->bucket_mtime)); } s->formatter->close_section(); -- 2.39.5