]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: do not ignore EEXIST in RGWPutObj::execute 23033/head
authorMatt Benjamin <mbenjamin@redhat.com>
Thu, 12 Jul 2018 20:42:29 +0000 (16:42 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Fri, 13 Jul 2018 15:08:32 +0000 (11:08 -0400)
The existing logic appears able to cause propagation of a failed
exclusive create to the client, when it should instead have been
retried, due to disagreement about the logical write offset. (The
value of ofs here could be > 0 due to the operation of a stacked
write filter [e.g., compressor], when the RADOS write offset was
0 and hence an exclusive write that should be retried).

Rationale for fix by Casey.

http://tracker.ceph.com/issues/22790

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_op.cc

index a20146222a068a0b10d3e467fd396001ffb67fa4..cf7648a4bb7687abf41cf1055c28eafa7bbb6aea 100644 (file)
@@ -3635,7 +3635,7 @@ void RGWPutObj::execute()
 
     op_ret = put_data_and_throttle(filter, data, ofs, need_to_wait);
     if (op_ret < 0) {
-      if (!need_to_wait || op_ret != -EEXIST) {
+      if (op_ret != -EEXIST) {
         ldpp_dout(this, 20) << "processor->thottle_data() returned ret="
                          << op_ret << dendl;
         goto done;