From: Matt Benjamin Date: Tue, 3 Feb 2026 22:12:22 +0000 (-0500) Subject: posixdriver: fix cksum_type, flags propagation X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b863b61a3d42e5080e568946afbb0d4415f2dc4;p=ceph.git posixdriver: fix cksum_type, flags propagation Posixdriver doesn't serialize POSIXMultipartUpload, but rather a member mp_obj of type POSIXMPObj--so to avoid losing the latter's inherited cksum_type and cksum_flags members (which are already copied in), copy them out in POSIXMultiPartUpload::get_info() which we need to call to copy out dest_placement anyway. (oops, chksum_type was copied in, but not cksum_flags) Signed-off-by: Matt Benjamin --- diff --git a/src/rgw/driver/posix/rgw_sal_posix.cc b/src/rgw/driver/posix/rgw_sal_posix.cc index 8633a75d9ad..6c6475daaca 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.cc +++ b/src/rgw/driver/posix/rgw_sal_posix.cc @@ -3822,6 +3822,8 @@ int POSIXMultipartUpload::init(const DoutPrefixProvider *dpp, optional_yield y, } mp_obj.upload_info.cksum_type = cksum_type; + mp_obj.upload_info.cksum_flags = cksum_flags; + if (obj_retention) { mp_obj.upload_info.obj_retention_exist = true; mp_obj.upload_info.obj_retention = *obj_retention; @@ -3830,6 +3832,7 @@ int POSIXMultipartUpload::init(const DoutPrefixProvider *dpp, optional_yield y, mp_obj.upload_info.obj_legal_hold_exist = true; mp_obj.upload_info.obj_legal_hold = *obj_legal_hold; } + mp_obj.upload_info.dest_placement = dest_placement; mp_obj.owner = owner; @@ -4117,12 +4120,17 @@ int POSIXMultipartUpload::get_info(const DoutPrefixProvider *dpp, optional_yield } } *rule = &mp_obj.upload_info.dest_placement; + if (mp_obj.upload_info.obj_retention_exist) { obj_retention = mp_obj.upload_info.obj_retention; } if (mp_obj.upload_info.obj_legal_hold_exist) { obj_legal_hold = mp_obj.upload_info.obj_legal_hold; } + + /* no te olvides los cksum */ + cksum_type = mp_obj.upload_info.cksum_type; + cksum_flags = mp_obj.upload_info.cksum_flags; } return 0; diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index b5fd4bb8ddf..5d63433fc62 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -7266,6 +7266,10 @@ void RGWCompleteMultipart::execute(optional_yield y) } upload = s->bucket->get_multipart_upload(s->object->get_name(), upload_id); + + rgw_placement_rule* dest_placement; + op_ret = upload->get_info(this, s->yield, &dest_placement); + ldpp_dout(this, 16) << fmt::format("INFO: {}->get_multipart_upload for obj {}, {} cksum_type {}", s->bucket->get_name(), @@ -7273,8 +7277,6 @@ void RGWCompleteMultipart::execute(optional_yield y) (!!upload) ? to_string(upload->cksum_type) : "nil") << dendl; - rgw_placement_rule* dest_placement; - op_ret = upload->get_info(this, s->yield, &dest_placement); if (op_ret < 0) { /* XXX this fails consistently when !checksum */ ldpp_dout(this, 0) <<