]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgwlc: don't incorrectly expire delete markers when !next_key_name 47231/head
authorMatt Benjamin <mbenjamin@redhat.com>
Sun, 3 Apr 2022 20:36:22 +0000 (16:36 -0400)
committerCory Snyder <csnyder@iland.com>
Fri, 22 Jul 2022 08:07:47 +0000 (04:07 -0400)
This is a fencepost case when operating on the last element of a
listing, apparently masked before Mark Kogan's segfault fix).

Fixes: https://tracker.ceph.com/issues/55168
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
(cherry picked from commit 9cfc37807971b491176c1e8060e04d253071341e)

src/rgw/rgw_lc.cc

index e1fdb056d768419c8d2f581263ef233c0cdc4377..9664da572a99ce1910dfb82c13e3c22975f1aa5d 100644 (file)
@@ -1029,20 +1029,22 @@ public:
       return false;
     }
     if (o.is_delete_marker()) {
-      std::string nkn;
-      if (oc.next_key_name) nkn = *oc.next_key_name;
-      if (oc.next_has_same_name(o.key.name)) {
-       ldpp_dout(dpp, 7) << __func__ << "(): dm-check SAME: key=" << o.key
-                      << " next_key_name: %%" << nkn << "%% "
-                      << oc.wq->thr_name() << dendl;
-       return false;
-      } else {
-       ldpp_dout(dpp, 7) << __func__ << "(): dm-check DELE: key=" << o.key
-                        << " next_key_name: %%" << nkn << "%% "
-                        << oc.wq->thr_name() << dendl;
+      if (oc.next_key_name) {
+       std::string nkn = *oc.next_key_name;
+       if (oc.next_has_same_name(o.key.name)) {
+         ldpp_dout(dpp, 7) << __func__ << "(): dm-check SAME: key=" << o.key
+                          << " next_key_name: %%" << nkn << "%% "
+                          << oc.wq->thr_name() << dendl;
+         return false;
+       } else {
+         ldpp_dout(dpp, 7) << __func__ << "(): dm-check DELE: key=" << o.key
+                          << " next_key_name: %%" << nkn << "%% "
+                          << oc.wq->thr_name() << dendl;
         *exp_time = real_clock::now();
         return true;
+       }
       }
+      return false;
     }
 
     auto& mtime = o.meta.mtime;