From 729f687a135ed8097332dbd7919d0ad0137d73e2 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 26 Jun 2017 15:52:47 -0400 Subject: [PATCH] rgw: use uncompressed size for range_to_ofs() in slo/dlo Signed-off-by: Casey Bodley --- src/rgw/rgw_op.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index ee8ad9afe91..34f47d0eadd 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -934,7 +934,7 @@ int RGWGetObj::read_user_manifest_part(rgw_bucket& bucket, op_ret = read_op.prepare(); if (op_ret < 0) return op_ret; - op_ret = read_op.range_to_ofs(obj_size, cur_ofs, cur_end); + op_ret = read_op.range_to_ofs(ent.meta.accounted_size, cur_ofs, cur_end); if (op_ret < 0) return op_ret; bool need_decompress; @@ -946,7 +946,7 @@ int RGWGetObj::read_user_manifest_part(rgw_bucket& bucket, if (need_decompress) { - if (cs_info.orig_size != ent.meta.size) { + if (cs_info.orig_size != ent.meta.accounted_size) { // hmm.. something wrong, object not as expected, abort! ldout(s->cct, 0) << "ERROR: expected cs_info.orig_size=" << cs_info.orig_size << ", actual read size=" << ent.meta.size << dendl; @@ -1035,15 +1035,16 @@ static int iterate_user_manifest_parts(CephContext * const cct, } for (rgw_bucket_dir_entry& ent : objs) { - uint64_t cur_total_len = obj_ofs; - uint64_t start_ofs = 0, end_ofs = ent.meta.size; + const uint64_t cur_total_len = obj_ofs; + const uint64_t obj_size = ent.meta.accounted_size; + uint64_t start_ofs = 0, end_ofs = obj_size; - if ((ptotal_len || cb) && !found_start && cur_total_len + ent.meta.size > (uint64_t)ofs) { + if ((ptotal_len || cb) && !found_start && cur_total_len + obj_size > (uint64_t)ofs) { start_ofs = ofs - obj_ofs; found_start = true; } - obj_ofs += ent.meta.size; + obj_ofs += obj_size; if (pobj_sum) { etag_sum.Update((const byte *)ent.meta.etag.c_str(), ent.meta.etag.length()); @@ -1129,7 +1130,7 @@ static int iterate_slo_parts(CephContext *cct, rgw_bucket_dir_entry ent; ent.key.name = part.obj_name; - ent.meta.size = part.size; + ent.meta.accounted_size = ent.meta.size = part.size; ent.meta.etag = part.etag; uint64_t cur_total_len = obj_ofs; -- 2.39.5