]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/d4n: avoid reading head block (attrs) from cache,
authorPritha Srivastava <prsrivas@redhat.com>
Thu, 22 May 2025 04:20:50 +0000 (09:50 +0530)
committerPritha Srivastava <prsrivas@redhat.com>
Fri, 22 Aug 2025 15:02:21 +0000 (20:32 +0530)
if they have already been read while reading permissions
for an object.

Signed-off-by: Pritha Srivastava <prsrivas@redhat.com>
src/rgw/driver/d4n/rgw_sal_d4n.cc
src/rgw/driver/d4n/rgw_sal_d4n.h

index c1d3701baf5975dec41deaab5aa5df21c441b300..3995e5e6f19d5b37782d55477c6b7436e66071af 100644 (file)
@@ -897,6 +897,11 @@ int D4NFilterObject::set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattr
 
 int D4NFilterObject::get_obj_attrs_from_cache(const DoutPrefixProvider* dpp, optional_yield y)
 {
+  //if attrs have already been set due to a previous call, do not read again.
+  if (attrs_read_from_cache) {
+    return true;
+  }
+
   std::string head_oid_in_cache;
   rgw::sal::Attrs attrs;
   rgw::d4n::CacheBlock block;
@@ -957,6 +962,7 @@ int D4NFilterObject::get_obj_attrs_from_cache(const DoutPrefixProvider* dpp, opt
     if (ret < 0) {
       ldpp_dout(dpp, 0) << "D4NFilterObject::" << __func__ << "(): D4NFilterObject set_attrs method failed." << dendl;
     }
+    attrs_read_from_cache = true;
   } // if found_in_cache = true
 
   return found_in_cache;
index 8511e03554de3d522f0cdfac5bc7a7483c70a1ea..b0ae4754db18908e795bcfbacf39b39ded972648 100644 (file)
@@ -138,6 +138,7 @@ class D4NFilterObject : public FilterObject {
     bool delete_marker{false};
     bool exists_in_cache{false};
     bool load_from_store{false};
+    bool attrs_read_from_cache{false};
 
   public:
     struct D4NFilterReadOp : FilterReadOp {