From: Kefu Chai Date: Sat, 24 Aug 2019 06:12:06 +0000 (+0800) Subject: rgw: update_iterator() in RGWObjManifest::set_explicit() X-Git-Tag: v15.1.0~1760^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1efc7b1d740dc2323281010d0c34f0ad136e7660;p=ceph.git rgw: update_iterator() in RGWObjManifest::set_explicit() we should update the end iterator when updating RGWObjManifest with its parts Fixes: https://tracker.ceph.com/issues/41416 Signed-off-by: Kefu Chai --- diff --git a/src/rgw/rgw_dencoder.cc b/src/rgw/rgw_dencoder.cc index 74b688f3fe8f..4fef224f33ec 100644 --- a/src/rgw/rgw_dencoder.cc +++ b/src/rgw/rgw_dencoder.cc @@ -146,6 +146,8 @@ void RGWObjManifest::obj_iterator::update_explicit_pos() void RGWObjManifest::generate_test_instances(std::list& o) { RGWObjManifest *m = new RGWObjManifest; + map objs; + uint64_t total_size = 0; for (int i = 0; i<10; i++) { RGWObjManifestPart p; rgw_bucket b; @@ -153,12 +155,11 @@ void RGWObjManifest::generate_test_instances(std::list& o) p.loc = rgw_obj(b, "object"); p.loc_ofs = 0; p.size = 512 * 1024; - m->objs[(uint64_t)i * 512 * 1024] = p; + total_size += p.size; + objs[total_size] = p; } - m->obj_size = 5 * 1024 * 1024; - + m->set_explicit(total_size, objs); o.push_back(m); - o.push_back(new RGWObjManifest); } diff --git a/src/rgw/rgw_obj_manifest.h b/src/rgw/rgw_obj_manifest.h index 78c7a05914da..3912b5048e55 100644 --- a/src/rgw/rgw_obj_manifest.h +++ b/src/rgw/rgw_obj_manifest.h @@ -204,8 +204,8 @@ public: void set_explicit(uint64_t _size, map& _objs) { explicit_objs = true; - obj_size = _size; objs.swap(_objs); + set_obj_size(_size); } void get_implicit_location(uint64_t cur_part_id, uint64_t cur_stripe, uint64_t ofs, string *override_prefix, rgw_obj_select *location);