Skip to content

Commit 0efafa3

Browse files
authored
Merge pull request ceph#64830 from AliMasarweh/wip-alimasa-conditional
RGW | fix conditional MultiWrite Reviewed-by: Casey Bodley <[email protected]>
2 parents 403f5d6 + 0f8d096 commit 0efafa3

17 files changed

+51
-14
lines changed

src/rgw/driver/d4n/rgw_sal_d4n.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2891,7 +2891,9 @@ int D4NFilterMultipartUpload::complete(const DoutPrefixProvider *dpp,
28912891
std::string& tag, ACLOwner& owner,
28922892
uint64_t olh_epoch,
28932893
rgw::sal::Object* target_obj,
2894-
prefix_map_t& processed_prefixes)
2894+
prefix_map_t& processed_prefixes,
2895+
const char *if_match,
2896+
const char *if_nomatch)
28952897
{
28962898
//call next->complete to complete writing the object to the backend store
28972899
auto ret = next->complete(dpp, y, cct, part_etags, remove_objs, accounted_size,

src/rgw/driver/d4n/rgw_sal_d4n.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,9 @@ class D4NFilterMultipartUpload : public FilterMultipartUpload {
355355
std::string& tag, ACLOwner& owner,
356356
uint64_t olh_epoch,
357357
rgw::sal::Object* target_obj,
358-
prefix_map_t& processed_prefixes) override;
358+
prefix_map_t& processed_prefixes,
359+
const char *if_match = nullptr,
360+
const char *if_nomatch = nullptr) override;
359361
};
360362

361363
} } // namespace rgw::sal

src/rgw/driver/motr/rgw_sal_motr.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2675,7 +2675,9 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp,
26752675
std::string& tag, ACLOwner& owner,
26762676
uint64_t olh_epoch,
26772677
rgw::sal::Object* target_obj,
2678-
prefix_map_t& processed_prefixes)
2678+
prefix_map_t& processed_prefixes,
2679+
const char *if_match,
2680+
const char *if_nomatch)
26792681
{
26802682
char final_etag[CEPH_CRYPTO_MD5_DIGESTSIZE];
26812683
char final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + 16];

src/rgw/driver/motr/rgw_sal_motr.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,9 @@ class MotrMultipartUpload : public StoreMultipartUpload {
939939
std::string& tag, ACLOwner& owner,
940940
uint64_t olh_epoch,
941941
rgw::sal::Object* target_obj,
942-
prefix_map_t& processed_prefixes) override;
942+
prefix_map_t& processed_prefixes,
943+
const char *if_match = nullptr,
944+
const char *if_nomatch = nullptr) override;
943945
virtual int cleanup_orphaned_parts(const DoutPrefixProvider *dpp,
944946
CephContext *cct, optional_yield y,
945947
const rgw_obj& obj,

src/rgw/driver/posix/rgw_sal_posix.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3918,7 +3918,9 @@ int POSIXMultipartUpload::complete(const DoutPrefixProvider *dpp,
39183918
std::string& tag, ACLOwner& owner,
39193919
uint64_t olh_epoch,
39203920
rgw::sal::Object* target_obj,
3921-
prefix_map_t& processed_prefixes)
3921+
prefix_map_t& processed_prefixes,
3922+
const char *if_match,
3923+
const char *if_nomatch)
39223924
{
39233925
char final_etag[CEPH_CRYPTO_MD5_DIGESTSIZE];
39243926
char final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + 16];

src/rgw/driver/posix/rgw_sal_posix.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1284,7 +1284,9 @@ class POSIXMultipartUpload : public StoreMultipartUpload {
12841284
std::string& tag, ACLOwner& owner,
12851285
uint64_t olh_epoch,
12861286
rgw::sal::Object* target_obj,
1287-
prefix_map_t& processed_prefixes) override;
1287+
prefix_map_t& processed_prefixes,
1288+
const char *if_match = nullptr,
1289+
const char *if_nomatch = nullptr) override;
12881290
virtual int cleanup_orphaned_parts(const DoutPrefixProvider *dpp,
12891291
CephContext *cct, optional_yield y,
12901292
const rgw_obj& obj,

src/rgw/driver/rados/rgw_putobj_processor.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ int MultipartObjectProcessor::complete(
560560
obj_op.meta.delete_at = delete_at;
561561
obj_op.meta.zones_trace = zones_trace;
562562
obj_op.meta.modify_tail = true;
563+
obj_op.meta.if_match = if_match;
564+
obj_op.meta.if_nomatch = if_nomatch;
563565

564566
r = obj_op.write_meta(actual_size, accounted_size, attrs, rctx,
565567
writer.get_trace(), flags & rgw::sal::FLAG_LOG_OP);
@@ -791,6 +793,8 @@ int AppendObjectProcessor::complete(
791793
obj_op.meta.modify_tail = true;
792794
obj_op.meta.keep_tail = keep_tail;
793795
obj_op.meta.appendable = true;
796+
obj_op.meta.if_match = if_match;
797+
obj_op.meta.if_nomatch = if_nomatch;
794798
//Add the append part number
795799
bufferlist cur_part_num_bl;
796800
using ceph::encode;

src/rgw/driver/rados/rgw_sal_rados.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4149,7 +4149,9 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
41494149
std::string& tag, ACLOwner& owner,
41504150
uint64_t olh_epoch,
41514151
rgw::sal::Object* target_obj,
4152-
prefix_map_t& processed_prefixes)
4152+
prefix_map_t& processed_prefixes,
4153+
const char *if_match,
4154+
const char *if_nomatch)
41534155
{
41544156
char final_etag[CEPH_CRYPTO_MD5_DIGESTSIZE];
41554157
char final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + 16];
@@ -4340,6 +4342,8 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
43404342
obj_op.meta.modify_tail = true;
43414343
obj_op.meta.completeMultipart = true;
43424344
obj_op.meta.olh_epoch = olh_epoch;
4345+
obj_op.meta.if_match = if_match;
4346+
obj_op.meta.if_nomatch = if_nomatch;
43434347

43444348
const req_context rctx{dpp, y, nullptr};
43454349
ret = obj_op.write_meta(ofs, accounted_size, attrs, rctx, get_trace());

src/rgw/driver/rados/rgw_sal_rados.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -875,7 +875,9 @@ class RadosMultipartUpload : public StoreMultipartUpload {
875875
std::string& tag, ACLOwner& owner,
876876
uint64_t olh_epoch,
877877
rgw::sal::Object* target_obj,
878-
prefix_map_t& processed_prefixes) override;
878+
prefix_map_t& processed_prefixes,
879+
const char *if_match = nullptr,
880+
const char *if_nomatch = nullptr) override;
879881
virtual int cleanup_orphaned_parts(const DoutPrefixProvider *dpp,
880882
CephContext *cct, optional_yield y,
881883
const rgw_obj& obj,

src/rgw/rgw_op.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7227,7 +7227,7 @@ void RGWCompleteMultipart::execute(optional_yield y)
72277227
op_ret =
72287228
upload->complete(this, y, s->cct, parts->parts, remove_objs, accounted_size,
72297229
compressed, cs_info, ofs, s->req_id, s->owner, olh_epoch,
7230-
s->object.get(), processed_prefixes);
7230+
s->object.get(), processed_prefixes, if_match, if_nomatch);
72317231
if (op_ret < 0) {
72327232
ldpp_dout(this, 0) << "ERROR: upload complete failed ret=" << op_ret << dendl;
72337233
return;

0 commit comments

Comments
 (0)