From: Casey Bodley Date: Wed, 17 Jul 2024 14:28:08 +0000 (-0400) Subject: rgw/rados: set_attrs() falls back to existing attrs for index update X-Git-Tag: testing/wip-vshankar-testing-20240718.183435-debug~7^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f433e2ff4568416619af4885314d43c621fb4db9;p=ceph-ci.git rgw/rados: set_attrs() falls back to existing attrs for index update set_attrs() needs the ACLOwner, etag, content-type and storage class for the bucket index update. if those attrs aren't being updated, consult their existing attrs in state->attrset Fixes: https://tracker.ceph.com/issues/64173 Signed-off-by: Casey Bodley --- diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index b010a63d443..74684bec1ee 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -6588,18 +6588,30 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* octx, RGWBu ACLOwner owner; if (iter = attrs.find(RGW_ATTR_ACL); iter != attrs.end()) { (void) decode_policy(dpp, iter->second, &owner); + } else if (iter = state->attrset.find(RGW_ATTR_ACL); + iter != state->attrset.end()) { + (void) decode_policy(dpp, iter->second, &owner); } std::string etag; if (iter = attrs.find(RGW_ATTR_ETAG); iter != attrs.end()) { etag = rgw_bl_str(iter->second); + } else if (iter = state->attrset.find(RGW_ATTR_ETAG); + iter != state->attrset.end()) { + etag = rgw_bl_str(iter->second); } std::string content_type; if (iter = attrs.find(RGW_ATTR_CONTENT_TYPE); iter != attrs.end()) { content_type = rgw_bl_str(iter->second); + } else if (iter = state->attrset.find(RGW_ATTR_CONTENT_TYPE); + iter != state->attrset.end()) { + content_type = rgw_bl_str(iter->second); } string storage_class; if (iter = attrs.find(RGW_ATTR_STORAGE_CLASS); iter != attrs.end()) { storage_class = rgw_bl_str(iter->second); + } else if (iter = state->attrset.find(RGW_ATTR_STORAGE_CLASS); + iter != state->attrset.end()) { + storage_class = rgw_bl_str(iter->second); } uint64_t epoch = ioctx.get_last_version(); int64_t poolid = ioctx.get_id();