@@ -7042,17 +7042,30 @@ void RGWAbortMultipart::execute(optional_yield y)
70427042 return ;
70437043
70447044 upload = s->bucket ->get_multipart_upload (s->object ->get_name (), upload_id);
7045+ meta_obj = upload->get_meta_obj ();
7046+ meta_obj->set_in_extra_data (true );
7047+ meta_obj->get_obj_attrs (s->yield , this );
7048+
70457049 jspan_context trace_ctx (false , false );
70467050 if (tracing::rgw::tracer.is_enabled ()) {
70477051 // read meta object attributes for trace info
7048- meta_obj = upload->get_meta_obj ();
7049- meta_obj->set_in_extra_data (true );
7050- meta_obj->get_obj_attrs (s->yield , this );
70517052 extract_span_context (meta_obj->get_attrs (), trace_ctx);
70527053 }
70537054 multipart_trace = tracing::rgw::tracer.add_span (name (), trace_ctx);
70547055
7056+ int max_lock_secs_mp =
7057+ s->cct ->_conf .get_val <int64_t >(" rgw_mp_lock_max_time" );
7058+ utime_t dur (max_lock_secs_mp, 0 );
7059+ auto serializer = meta_obj->get_serializer (this , " RGWCompleteMultipart" );
7060+ op_ret = serializer->try_lock (this , dur, y);
7061+ if (op_ret < 0 ) {
7062+ if (op_ret == -ENOENT) {
7063+ op_ret = -ERR_NO_SUCH_UPLOAD;
7064+ }
7065+ return ;
7066+ }
70557067 op_ret = upload->abort (this , s->cct , y);
7068+ serializer->unlock ();
70567069}
70577070
70587071int RGWListMultipart::verify_permission (optional_yield y)
0 commit comments