]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: dump Last-Modified in Swift's responses for GET/HEAD on container.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 2 Aug 2017 14:28:40 +0000 (10:28 -0400)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 2 Aug 2017 14:30:06 +0000 (10:30 -0400)
Fixes: http://tracker.ceph.com/issues/20883
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_rest_swift.cc

index 2ec385f1cb25404c7489c88897e235a4e72174f3..7547f7ec1905df05d997dd5d1f4a7f688df803dc 100644 (file)
@@ -1766,7 +1766,8 @@ struct req_state {
   string redirect;
 
   RGWBucketInfo bucket_info;
-  map<string, bufferlist> bucket_attrs;
+  real_time bucket_mtime;
+  std::map<std::string, ceph::bufferlist> bucket_attrs;
   bool bucket_exists;
 
   bool has_bad_meta;
index 72a4ec86fe28cdb889e6f6409486a4e8cddc3e45..0c60aee6ead8bf4ccb01e1f931158efaf4bf4f0b 100644 (file)
@@ -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<RGWObjectCtx *>(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<std::string, ceph::bufferlist> 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;
   }
index f1b47a4fa54547bb9b084073bcfc0faa0c24aa00..a22bd6e8803360524611da55e77428ea3123c989 100644 (file)
@@ -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()