From 87c4497f5b08c6a54b7196a31bd956629d38071a Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 2 Aug 2017 10:28:40 -0400 Subject: [PATCH] rgw: dump Last-Modified in Swift's responses for GET/HEAD on container. Fixes: http://tracker.ceph.com/issues/20883 Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_common.h | 3 ++- src/rgw/rgw_op.cc | 12 ++++++++---- src/rgw/rgw_rest_swift.cc | 4 ++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 2ec385f1cb2..7547f7ec190 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1766,7 +1766,8 @@ struct req_state { string redirect; RGWBucketInfo bucket_info; - map bucket_attrs; + real_time bucket_mtime; + std::map bucket_attrs; bool bucket_exists; bool has_bad_meta; diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 72a4ec86fe2..0c60aee6ead 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -441,9 +441,13 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s) if (!s->bucket_name.empty()) { s->bucket_exists = true; if (s->bucket_instance_id.empty()) { - ret = store->get_bucket_info(obj_ctx, s->bucket_tenant, s->bucket_name, s->bucket_info, NULL, &s->bucket_attrs); + ret = store->get_bucket_info(obj_ctx, s->bucket_tenant, s->bucket_name, + s->bucket_info, &s->bucket_mtime, + &s->bucket_attrs); } else { - ret = store->get_bucket_instance_info(obj_ctx, s->bucket_instance_id, s->bucket_info, NULL, &s->bucket_attrs); + ret = store->get_bucket_instance_info(obj_ctx, s->bucket_instance_id, + s->bucket_info, &s->bucket_mtime, + &s->bucket_attrs); } if (ret < 0) { if (ret != -ENOENT) { @@ -2548,7 +2552,7 @@ void RGWCreateBucket::execute() * specific request */ RGWObjectCtx& obj_ctx = *static_cast(s->obj_ctx); op_ret = store->get_bucket_info(obj_ctx, s->bucket_tenant, s->bucket_name, - s->bucket_info, NULL, &s->bucket_attrs); + s->bucket_info, nullptr, &s->bucket_attrs); if (op_ret < 0 && op_ret != -ENOENT) return; s->bucket_exists = (op_ret != -ENOENT); @@ -5999,7 +6003,7 @@ int RGWBulkUploadOp::handle_dir(const boost::string_ref path) RGWBucketInfo binfo; std::map battrs; op_ret = store->get_bucket_info(*dir_ctx, s->bucket_tenant, bucket_name, - binfo, NULL, &battrs); + binfo, nullptr, &battrs); if (op_ret < 0 && op_ret != -ENOENT) { return op_ret; } diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index f1b47a4fa54..a22bd6e8803 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -457,6 +457,10 @@ static void dump_container_metadata(struct req_state *s, if (ws_conf.listing_enabled) { dump_header(s, "X-Container-Meta-Web-Listings", "true"); } + + /* Dump bucket's modification time. Compliance with the Swift API really + * needs that. */ + dump_last_modified(s, s->bucket_mtime); } void RGWStatAccount_ObjStore_SWIFT::execute() -- 2.39.5