summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeena Fallah <seenafallah@gmail.com>2024-11-03 23:18:57 +0100
committerSeena Fallah <seenafallah@gmail.com>2025-01-15 21:18:30 +0100
commit3dab2ed3294e2aa7fa34ec6a729453d410305e89 (patch)
tree721728d6e3474dd3de5c5679fc974433d79896a2
parentMerge pull request #60847 from cbodley/wip-rgw-boto-headbucket-stats (diff)
downloadceph-3dab2ed3294e2aa7fa34ec6a729453d410305e89.tar.xz
ceph-3dab2ed3294e2aa7fa34ec6a729453d410305e89.zip
rgw: update attrs with replication status to reflect in response
In handle_replication_status_header() when the COMPLETED status is being set to object's attr, it needs to be reflected to the current live attrs for the corresponding request so it can be reflected in the first try than the second. Fixes: https://tracker.ceph.com/issues/69549 Signed-off-by: Seena Fallah <seenafallah@gmail.com>
-rw-r--r--src/rgw/rgw_op.cc23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 7b0ca3134a3..9f25d275852 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -917,15 +917,20 @@ void handle_replication_status_header(
auto attr_iter = attrs.find(RGW_ATTR_OBJ_REPLICATION_STATUS);
if (attr_iter != attrs.end() && attr_iter->second.to_str() == "PENDING") {
if (s->object->is_sync_completed(dpp, obj_mtime)) {
- s->object->set_atomic();
- rgw::sal::Attrs setattrs, rmattrs;
- bufferlist bl;
- bl.append("COMPLETED");
- setattrs[RGW_ATTR_OBJ_REPLICATION_STATUS] = std::move(bl);
- int ret = s->object->set_obj_attrs(dpp, &setattrs, &rmattrs, s->yield, 0);
- if (ret == 0) {
- ldpp_dout(dpp, 20) << *s->object << " has amz-replication-status header set to COMPLETED" << dendl;
- }
+ s->object->set_atomic();
+ rgw::sal::Attrs setattrs, rmattrs;
+ bufferlist bl;
+ bl.append("COMPLETED");
+ setattrs[RGW_ATTR_OBJ_REPLICATION_STATUS] = bl;
+ int ret = s->object->set_obj_attrs(dpp, &setattrs, &rmattrs, s->yield, 0);
+ if (ret < 0) {
+ ldpp_dout(dpp, 0) << "ERROR: failed to set object replication status to COMPLETED ret=" << ret << dendl;
+ return;
+ }
+
+ ldpp_dout(dpp, 20) << *s->object << " has amz-replication-status header set to COMPLETED" << dendl;
+
+ attrs[RGW_ATTR_OBJ_REPLICATION_STATUS] = std::move(bl); // update the attrs so that the status is reflected in the response
}
}
}