]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: apply_olh_log should clear_olh before trimming olh log
authorCory Snyder <csnyder@1111systems.com>
Wed, 14 Jun 2023 14:01:43 +0000 (14:01 +0000)
committerCory Snyder <csnyder@1111systems.com>
Tue, 18 Jul 2023 17:53:53 +0000 (17:53 +0000)
When pending_removal is true and the log is trimmed prior to
clearing olh, it allows for the possibility that the olh is not
cleared (e.g. due to new pending xattrs on the olh obj), but the
olh log entries are removed.

Signed-off-by: Cory Snyder <csnyder@1111systems.com>
(cherry picked from commit dfbe4f9cb078bad9a0244ce433a9728f8bd6b912)

Conflicts:
src/rgw/driver/rados/rgw_rados.cc

Cherry-pick notes:
- conflicts due to https://github.com/ceph/ceph/pull/50206 on main

src/rgw/driver/rados/rgw_rados.cc

index d66f4112d6e69f5de2d6ad38501ce90118f12faf..df334e99e3998a350be490f0007cac501c95b500 100644 (file)
@@ -7514,17 +7514,21 @@ int RGWRados::apply_olh_log(const DoutPrefixProvider *dpp,
     return r;
   }
 
+  if (need_to_remove) {
+    string olh_tag(state.olh_tag.c_str(), state.olh_tag.length());
+    r = clear_olh(dpp, obj_ctx, obj, bucket_info, ref, olh_tag, last_ver, null_yield);
+    if (r < 0 && r != -ECANCELED) {
+      ldpp_dout(dpp, 0) << "ERROR: could not clear olh, r=" << r << dendl;
+      return r;
+    }
+  }
+
   r = bucket_index_trim_olh_log(dpp, bucket_info, state, obj, last_ver);
-  if (r < 0) {
+  if (r < 0 && r != -ECANCELED) {
     ldpp_dout(dpp, 0) << "ERROR: could not trim olh log, r=" << r << dendl;
     return r;
   }
 
-  if (need_to_remove) {
-    string olh_tag(state.olh_tag.c_str(), state.olh_tag.length());
-    clear_olh(dpp, obj_ctx, obj, bucket_info, ref, olh_tag, last_ver, null_yield);
-  }
-
   return 0;
 }