]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add accounted_size to RGWUploadPartInfo
authorCasey Bodley <cbodley@redhat.com>
Thu, 29 Sep 2016 21:59:32 +0000 (17:59 -0400)
committerAdam Kupczyk <akupczyk@mirantis.com>
Wed, 2 Nov 2016 11:13:06 +0000 (12:13 +0100)
and use accounted_size for ListMultipart operations

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_op.cc
src/rgw/rgw_rados.h
src/rgw/rgw_rest_s3.cc

index e72548ab785bf04793b1238a8fd01a918766d85a..95b0c61f4a19cae3f3cffeb2341b98e20d3c9109 100644 (file)
@@ -2698,6 +2698,7 @@ int RGWPutObjProcessor_Multipart::do_complete(string& etag, real_time *mtime, re
   info.num = atoi(part_num.c_str());
   info.etag = etag;
   info.size = s->obj_size;
+  info.accounted_size = s->obj_size; // TODO
   info.modified = real_clock::now();
   info.manifest = manifest;
 
@@ -4802,6 +4803,7 @@ void RGWCompleteMultipart::execute()
   bool truncated;
   RGWCompressionInfo cs_info;
   bool compressed = false;
+  uint64_t accounted_size = 0;
 
   uint64_t min_part_size = s->cct->_conf->rgw_multipart_min_part_size;
 
@@ -4840,7 +4842,7 @@ void RGWCompleteMultipart::execute()
     }
 
     for (obj_iter = obj_parts.begin(); iter != parts->parts.end() && obj_iter != obj_parts.end(); ++iter, ++obj_iter, ++handled_parts) {
-      uint64_t part_size = obj_iter->second.size;
+      uint64_t part_size = obj_iter->second.accounted_size;
       if (handled_parts < (int)parts->parts.size() - 1 &&
           part_size < min_part_size) {
         op_ret = -ERR_TOO_SMALL;
@@ -4915,6 +4917,7 @@ void RGWCompleteMultipart::execute()
       remove_objs.push_back(remove_key);
 
       ofs += obj_part.size;
+      accounted_size += obj_part.accounted_size;
     }
   } while (truncated);
   hash.Final((byte *)final_etag);
@@ -5014,7 +5017,6 @@ void RGWAbortMultipart::execute()
 
   cls_rgw_obj_chain chain;
   list<rgw_obj_key> remove_objs;
-  uint64_t deleted_size = 0;
 
   do {
     op_ret = list_multipart_parts(store, s, upload_id, meta_oid, max_parts,
@@ -5044,24 +5046,6 @@ void RGWAbortMultipart::execute()
           remove_objs.push_back(key);
         }
       }
-        map<string, bufferlist> attrset;
-        int y = get_obj_attrs(store, s, obj, attrset);
-        map<string, bufferlist>::iterator cmp = attrset.find(RGW_ATTR_COMPRESSION);
-        if (!y && cmp != attrset.end()) {
-          RGWCompressionInfo cs_info;
-          bufferlist::iterator bliter = cmp->second.begin();
-          try {
-            ::decode(cs_info, bliter);
-            if (cs_info.compression_type != "none")
-              deleted_size += cs_info.orig_size;
-            else
-              deleted_size += obj_part.size;
-          } catch (buffer::error& err) {
-            ldout(s->cct, 5) << "Failed to get decompressed obj size" << dendl;
-            deleted_size += obj_part.size;
-          }
-        } else
-          deleted_size += obj_part.size;
     }
   } while (truncated);
 
index ba62caee50c4aeb00deb146bf5771506cc383065..788923e972667275080fa57fcbdf40d1aae8a0c1 100644 (file)
@@ -710,6 +710,7 @@ WRITE_CLASS_ENCODER(RGWObjManifest)
 struct RGWUploadPartInfo {
   uint32_t num;
   uint64_t size;
+  uint64_t accounted_size{0};
   string etag;
   ceph::real_time modified;
   RGWObjManifest manifest;
@@ -725,6 +726,7 @@ struct RGWUploadPartInfo {
     ::encode(modified, bl);
     ::encode(manifest, bl);
     ::encode(cs_info, bl);
+    ::encode(accounted_size, bl);
     ENCODE_FINISH(bl);
   }
   void decode(bufferlist::iterator& bl) {
@@ -735,8 +737,12 @@ struct RGWUploadPartInfo {
     ::decode(modified, bl);
     if (struct_v >= 3)
       ::decode(manifest, bl);
-    if (struct_v >= 4)
+    if (struct_v >= 4) {
       ::decode(cs_info, bl);
+      ::decode(accounted_size, bl);
+    } else {
+      accounted_size = size;
+    }
     DECODE_FINISH(bl);
   }
   void dump(Formatter *f) const;
index c3f2b523b8a1be969fdd520d91a7cd4f88096422..5b80dd8a26f5a31d2f2c0cf42873c915dcc89df3 100644 (file)
@@ -2747,7 +2747,7 @@ void RGWListMultipart_ObjStore_S3::send_response()
 
       s->formatter->dump_unsigned("PartNumber", info.num);
       s->formatter->dump_format("ETag", "\"%s\"", info.etag.c_str());
-      s->formatter->dump_unsigned("Size", info.size);
+      s->formatter->dump_unsigned("Size", info.accounted_size);
       s->formatter->close_section();
     }
     s->formatter->close_section();