From 91dc7f3be945dccd8f59e070e9bc43a2a5df12db Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 3 May 2024 15:29:00 -0400 Subject: [PATCH] rgw: CompleteMultipart uses s->object for Notification get_notification() should be associated with the target object s->object. the meta_obj has the wrong object name, so required passing s->object->get_name() as an extra argument importantly, Notification no longer depends on the lifetime of meta_obj to avoid a dangling pointer, while the lifetime of s->object is guaranteed Signed-off-by: Casey Bodley --- src/rgw/rgw_op.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 0bc29a3707b5c..c08697786a90f 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -6378,15 +6378,6 @@ void RGWCompleteMultipart::execute(optional_yield y) jspan_context trace_ctx(false, false); extract_span_context(meta_obj->get_attrs(), trace_ctx); multipart_trace = tracing::rgw::tracer.add_span(name(), trace_ctx); - - - // make reservation for notification if needed - res = driver->get_notification(meta_obj.get(), nullptr, s, rgw::notify::ObjectCreatedCompleteMultipartUpload, y, - &s->object->get_name()); - op_ret = res->publish_reserve(this); - if (op_ret < 0) { - return; - } if (s->bucket->versioning_enabled()) { if (!version_id.empty()) { @@ -6398,6 +6389,13 @@ void RGWCompleteMultipart::execute(optional_yield y) } s->object->set_attrs(meta_obj->get_attrs()); + // make reservation for notification if needed + res = driver->get_notification(s->object.get(), nullptr, s, rgw::notify::ObjectCreatedCompleteMultipartUpload, y); + op_ret = res->publish_reserve(this); + if (op_ret < 0) { + return; + } + op_ret = upload->complete(this, y, s->cct, parts->parts, remove_objs, accounted_size, compressed, cs_info, ofs, s->req_id, s->owner, olh_epoch, s->object.get()); if (op_ret < 0) { ldpp_dout(this, 0) << "ERROR: upload complete failed ret=" << op_ret << dendl; -- 2.39.5