]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgwlc: don't incorrectly expire delete markers when !next_key_name 45758/head
authorMatt Benjamin <mbenjamin@redhat.com>
Sun, 3 Apr 2022 20:36:22 +0000 (16:36 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Sun, 3 Apr 2022 20:51:15 +0000 (16:51 -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>
src/rgw/rgw_lc.cc

index 7b76f4e0b029db879b496059cbfb1be903104b43..669a65d20a69d061947e7983f6eb067c2101d675 100644 (file)
@@ -1025,20 +1025,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;