]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: cut short object read if a chunk returns error 1776/head
authorYehuda Sadeh <yehuda@inktank.com>
Tue, 6 May 2014 18:06:29 +0000 (11:06 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Tue, 6 May 2014 19:03:34 +0000 (12:03 -0700)
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 <yehuda@inktank.com>
src/rgw/rgw_rados.cc

index 0ea7057f5bd584c578b31fc24c2ab84243b4e669..902fcf857a8c09135da20162b4b2ad5981db591b 100644 (file)
@@ -4839,8 +4839,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();