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;
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;
}
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;
remove_objs.push_back(remove_key);
ofs += obj_part.size;
+ accounted_size += obj_part.accounted_size;
}
} while (truncated);
hash.Final((byte *)final_etag);
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,
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);
struct RGWUploadPartInfo {
uint32_t num;
uint64_t size;
+ uint64_t accounted_size{0};
string etag;
ceph::real_time modified;
RGWObjManifest manifest;
::encode(modified, bl);
::encode(manifest, bl);
::encode(cs_info, bl);
+ ::encode(accounted_size, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::iterator& bl) {
::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;
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();