]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add support for skipping manifest parsing during GET on Swift object. 6206/head
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Mon, 5 Oct 2015 17:43:13 +0000 (19:43 +0200)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Thu, 8 Oct 2015 15:39:14 +0000 (17:39 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h

index ff84aba0b064e14812225a03918ad5fea5a60685..37751ee29b2f6fd7f14397862b98fc291d161456 100644 (file)
@@ -984,7 +984,7 @@ void RGWGetObj::execute()
     goto done_err;
 
   attr_iter = attrs.find(RGW_ATTR_USER_MANIFEST);
-  if (attr_iter != attrs.end()) {
+  if (attr_iter != attrs.end() && !skip_manifest) {
     ret = handle_user_manifest(attr_iter->second.c_str());
     if (ret < 0) {
       ldout(s->cct, 0) << "ERROR: failed to handle user manifest ret=" << ret << dendl;
index 7a196a3d6ce22e3217c7dd66dce050aad1f78be8..0cdca94b4a29cdbde06b03a53560912f3fd2ee3f 100644 (file)
@@ -135,6 +135,7 @@ protected:
   bool get_data;
   bool partial_content;
   bool range_parsed;
+  bool skip_manifest;
   rgw_obj obj;
   utime_t gc_invalidate_time;
 
@@ -158,6 +159,7 @@ public:
     get_data = false;
     partial_content = false;
     range_parsed = false;
+    skip_manifest = false;
     ret = 0;
  }
 
index cfb447a4699e36a18b688a3d47c73ab3657969bc..64bb36c58b219cb13fd46de89bdc18759427125b 100644 (file)
@@ -841,6 +841,14 @@ void RGWCopyObj_ObjStore_SWIFT::send_response()
   }
 }
 
+int RGWGetObj_ObjStore_SWIFT::get_params()
+{
+  const string& mm = s->info.args.get("multipart-manifest");
+  skip_manifest = (mm.compare("get") == 0);
+
+  return RGWGetObj_ObjStore::get_params();
+}
+
 int RGWGetObj_ObjStore_SWIFT::send_response_data(bufferlist& bl, off_t bl_ofs, off_t bl_len)
 {
   string content_type;
index 55b41bbc4e4a06d86d1ee25dab039110fd45b2a8..1311dadb29d138eaabdb3ea820dc9af1e6890859 100644 (file)
@@ -13,6 +13,7 @@ public:
   RGWGetObj_ObjStore_SWIFT() {}
   ~RGWGetObj_ObjStore_SWIFT() {}
 
+  int get_params();
   int send_response_data(bufferlist& bl, off_t ofs, off_t len);
   bool need_object_expiration() { return true; }
 };