]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add support for X-Copied-From{-Account} headers of Swift API.
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Fri, 13 Mar 2015 17:37:39 +0000 (18:37 +0100)
committerKen Dreyer <kdreyer@redhat.com>
Mon, 4 May 2015 18:48:29 +0000 (12:48 -0600)
Fixes: #10663
Backport: hammer
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
(cherry picked from commit 94f1375ccb9df02cdd8f6828153ae2e3a7ad36b1)

src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h

index 4161743f39dc288d9e5fd5754e7b7f883b92c869..0798e673f0313aa4500d5c8f8efbfeed25af5842 100644 (file)
@@ -582,6 +582,20 @@ void RGWCopyObj_ObjStore_SWIFT::send_partial_response(off_t ofs)
   rgw_flush_formatter(s, s->formatter);
 }
 
+void RGWCopyObj_ObjStore_SWIFT::dump_copy_info()
+{
+  /* Dump X-Copied-From */
+  string objname, bucketname;
+  url_encode(src_object.name, objname);
+  url_encode(src_bucket.name, bucketname);
+  s->cio->print("X-Copied-From: %s/%s\r\n", bucketname.c_str(), objname.c_str());
+
+  /* Dump X-Copied-From-Account */
+  string account_name;
+  url_encode(s->user.user_id, account_name);
+  s->cio->print("X-Copied-From-Account: %s\r\n", account_name.c_str());
+}
+
 void RGWCopyObj_ObjStore_SWIFT::send_response()
 {
   if (!sent_header) {
@@ -591,6 +605,7 @@ void RGWCopyObj_ObjStore_SWIFT::send_response()
     dump_errno(s);
     dump_etag(s, etag.c_str());
     dump_last_modified(s, mtime);
+    dump_copy_info();
     end_header(s, this);
   } else {
     s->formatter->close_section();
index 2374e15bd0fd25e0bc7a49c11ff92dedb7aeb0c1..4f1358ef78120f87ffa62ecc4175b0e4824780ec 100644 (file)
@@ -113,6 +113,8 @@ public:
 
 class RGWCopyObj_ObjStore_SWIFT : public RGWCopyObj_ObjStore {
   bool sent_header;
+protected:
+  void dump_copy_info();
 public:
   RGWCopyObj_ObjStore_SWIFT() : sent_header(false) {}
   ~RGWCopyObj_ObjStore_SWIFT() {}