From 2be5af0006169cb54547034aa98b7eacb8751d59 Mon Sep 17 00:00:00 2001 From: Or Friedmann Date: Sun, 8 Mar 2020 15:34:48 +0200 Subject: [PATCH] rgw: Disable prefetch of entire head object when GET request with range header Disable prefetch of entire head object when GET request with range header. The current behavior for the RGW is getting the whole object although the client asked only for a small bytes offset. For example: If the client asked for bytes=0-1, The RGW will anyway fetch 0-4194304 Fixes: https://tracker.ceph.com/issues/44508 Signed-off-by: Or Friedmann --- src/rgw/rgw_op.cc | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index cb8e8a90d53..f5643fdab1b 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2147,22 +2147,14 @@ bool RGWGetObj::prefetch_data() return false; } - bool prefetch_first_chunk = true; range_str = s->info.env->get("HTTP_RANGE"); - + // TODO: add range prefetch if (range_str) { - int r = parse_range(); - /* error on parsing the range, stop prefetch and will fail in execute() */ - if (r < 0) { - return false; /* range_parsed==false */ - } - /* range get goes to shadow objects, stop prefetch */ - if (ofs >= s->cct->_conf->rgw_max_chunk_size) { - prefetch_first_chunk = false; - } + parse_range(); + return false; } - return get_data && prefetch_first_chunk; + return get_data; } void RGWGetObj::pre_exec()