]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: multipart copy-part handle versionId
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 30 Sep 2016 00:43:35 +0000 (17:43 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 30 Sep 2016 00:44:31 +0000 (17:44 -0700)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc

index 6a970045a3449a8d0b6928ee99369fb3cbe403e9..4d955cd4cbfd9a2736252198e8a972712f9c0383 100644 (file)
@@ -659,6 +659,7 @@ protected:
   string copy_source_tenant_name;
   string copy_source_bucket_name;
   string copy_source_object_name;
+  string copy_source_version_id;
   off_t copy_source_range_fst;
   off_t copy_source_range_lst;
   string etag;
index 0435080d7928ffdd0cb9447292edd6c3b8a9d37a..74ca71b21dac63aa802da740e8ac332cd6acd507 100644 (file)
@@ -1072,6 +1072,14 @@ int RGWPutObj_ObjStore_S3::get_params()
     }
     copy_source_object_name = copy_source_bucket_name.substr(pos + 1, copy_source_bucket_name.size());
     copy_source_bucket_name = copy_source_bucket_name.substr(0, pos);
+#define VERSION_ID_STR "?versionId="
+    pos = copy_source_object_name.find(VERSION_ID_STR);
+    if (pos == std::string::npos) {
+      url_decode(copy_source_object_name, copy_source_object_name);
+    } else {
+      copy_source_version_id = copy_source_object_name.substr(pos + sizeof(VERSION_ID_STR) - 1);
+      url_decode(copy_source_object_name.substr(0, pos), copy_source_object_name);
+    }
     pos = copy_source_bucket_name.find(":");
     if (pos == std::string::npos) {
        copy_source_tenant_name = s->src_tenant_name;