squid: rgw: fix data corruption when rados op return ETIMEDOUT
Reviewed-by: Casey Bodley <cbodley@redhat.com>
op = librados::ObjectWriteOperation{};
op.assert_exists(); // detect races with abort
op.omap_set(m);
+ cls_version_inc(op);
r = rgw_rados_operate(rctx.dpp, meta_obj_ref.ioctx, meta_obj_ref.obj.oid, &op, rctx.y);
}
+
if (r < 0) {
+ if (r == -ETIMEDOUT) {
+ // The meta_obj_ref write may eventually succeed, clear the set of objects for deletion. if it
+ // doesn't ever succeed, we'll orphan any tail objects as if we'd crashed before that write
+ writer.clear_written();
+ }
return r == -ENOENT ? -ERR_NO_SUCH_UPLOAD : r;
}