]> 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)
committerLoic Dachary <ldachary@redhat.com>
Wed, 6 May 2015 10:05:40 +0000 (12:05 +0200)
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 de44657a0d9e9d43555c2cd96e18f88d3f7de6eb..c87163d71f64a8955fb3c1901dfe2e441a7eb12e 100644 (file)
@@ -586,6 +586,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) {
@@ -595,6 +609,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() {}