Skip to content

Commit bae9ed8

Browse files
author
Artem Vasilev
committed
rgw/abortmp: Added lock for AbortMultipartUpload
Signed-off-by: Artem Vasilev <[email protected]>
1 parent c5eacfc commit bae9ed8

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/rgw/rgw_op.cc

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7023,17 +7023,27 @@ void RGWAbortMultipart::execute(optional_yield y)
70237023
return;
70247024

70257025
upload = s->bucket->get_multipart_upload(s->object->get_name(), upload_id);
7026+
meta_obj = upload->get_meta_obj();
7027+
meta_obj->set_in_extra_data(true);
7028+
meta_obj->get_obj_attrs(s->yield, this);
7029+
70267030
jspan_context trace_ctx(false, false);
70277031
if (tracing::rgw::tracer.is_enabled()) {
70287032
// read meta object attributes for trace info
7029-
meta_obj = upload->get_meta_obj();
7030-
meta_obj->set_in_extra_data(true);
7031-
meta_obj->get_obj_attrs(s->yield, this);
70327033
extract_span_context(meta_obj->get_attrs(), trace_ctx);
70337034
}
70347035
multipart_trace = tracing::rgw::tracer.add_span(name(), trace_ctx);
70357036

7037+
int max_lock_secs_mp =
7038+
s->cct->_conf.get_val<int64_t>("rgw_mp_lock_max_time");
7039+
utime_t dur(max_lock_secs_mp, 0);
7040+
auto serializer = meta_obj->get_serializer(this, "RGWCompleteMultipart");
7041+
op_ret = serializer->try_lock(this, dur, y);
7042+
if (op_ret < 0) {
7043+
return;
7044+
}
70367045
op_ret = upload->abort(this, s->cct, y);
7046+
serializer->unlock();
70377047
}
70387048

70397049
int RGWListMultipart::verify_permission(optional_yield y)

0 commit comments

Comments
 (0)