]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: fix cleanup of pgmeta-like objects on PG deletion
authorSage Weil <sage@redhat.com>
Thu, 18 Jul 2019 16:09:47 +0000 (11:09 -0500)
committerNathan Cutler <ncutler@suse.com>
Tue, 23 Jul 2019 14:57:55 +0000 (16:57 +0200)
If an object has an empty 'name' field, it "looks" like a pgmeta object,
and the PG cleanup code was skipping it.  However, we were letting these
objects get created.

Fix by only skipping *our* pgmeta object.  If there are other pgmeta-like
objects in the PG collection, clean them up.

Fixes: https://tracker.ceph.com/issues/38724
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit a0f48db5cbfc48761eeac0daa259fecbaa573969)

# Conflicts:
# src/osd/PG.cc
- location of this code is do_delete_work in master, _delete_some in n

src/osd/PG.cc

index 29955551aa2a093fe4b32f764bd823429f0ddfc4..f1d8bc088a7197a68e26d4bd1f1f90fbafcafc9d 100644 (file)
@@ -6590,9 +6590,13 @@ void PG::_delete_some(ObjectStore::Transaction *t)
   OSDriver::OSTransaction _t(osdriver.get_transaction(t));
   int64_t num = 0;
   for (auto& oid : olist) {
-    if (oid.is_pgmeta()) {
+    if (oid == pgmeta_oid) {
       continue;
     }
+    if (oid.is_pgmeta()) {
+      osd->clog->warn() << info.pgid << " found stray pgmeta-like " << oid
+                       << " during PG removal";
+    }
     int r = snap_mapper.remove_oid(oid.hobj, &_t);
     if (r != 0 && r != -ENOENT) {
       ceph_abort();