From f433e2ff4568416619af4885314d43c621fb4db9 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 17 Jul 2024 10:28:08 -0400 Subject: [PATCH] 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 --- src/rgw/driver/rados/rgw_rados.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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(); -- 2.39.5