From: Yehuda Sadeh Date: Tue, 6 May 2014 18:06:29 +0000 (-0700) Subject: rgw: cut short object read if a chunk returns error X-Git-Tag: v0.67.10~37 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=558249c519225d5e6d0784da20fe12d8f5d71cd2;p=ceph.git rgw: cut short object read if a chunk returns error Fixes: #8289 Backport: firefly, dumpling When reading an object, if we hit an error when trying to read one of the rados objects then we should just stop. Otherwise we're just going to continue reading the rest of the object, and since it can't be sent back to the client (as we have a hole in the middle), we end up accumulating everything in memory. Signed-off-by: Yehuda Sadeh (cherry picked from commit 03b0d1cfb7bd30a77fedcf75eb06476b21b14e95) --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 256bfd753d2..5c55f2b6e75 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4303,8 +4303,16 @@ void RGWRados::get_obj_aio_completion_cb(completion_t c, void *arg) ldout(cct, 20) << "get_obj_aio_completion_cb: io completion ofs=" << ofs << " len=" << len << dendl; d->throttle.put(len); - if (d->is_cancelled()) + r = rados_aio_get_return_value(c); + if (r < 0) { + ldout(cct, 0) << "ERROR: got unexpected error when trying to read object: " << r << dendl; + d->set_cancelled(r); goto done; + } + + if (d->is_cancelled()) { + goto done; + } d->data_lock.Lock();