From 7c18258e54741a54bdeb59d4da7fd4fee73e8618 Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Thu, 12 Jul 2018 16:42:29 -0400 Subject: [PATCH] rgw: do not ignore EEXIST in RGWPutObj::execute 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 --- src/rgw/rgw_op.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index a20146222a0..cf7648a4bb7 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -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; -- 2.39.5