From a8f7a800c54c71ed77a97b216ddd3aac32653ce9 Mon Sep 17 00:00:00 2001 From: Neha Ojha Date: Thu, 22 Apr 2021 17:13:40 +0000 Subject: [PATCH] osd/PG.cc: handle removal of pgmeta object In 7f047005fc72e1f37a45cde2d742bb2eb1e62881, we made the pg removal code much more efficient. But it started marking the pgmeta object as an unexpected onode, which in reality is expected to be removed after all the other objects. This behavior is very easily reproducible in a vstart cluster: ceph osd pool create test 1 1 rados -p test bench 10 write --no-cleanup ceph osd pool delete test test --yes-i-really-really-mean-it Before this patch: "do_delete_work additional unexpected onode list (new onodes has appeared since PG removal started[#2:00000000::::head#]" seen in the OSD logs. After this patch: "do_delete_work removing pgmeta object #2:00000000::::head#" is seen. Related to:https://tracker.ceph.com/issues/50466 Signed-off-by: Neha Ojha (cherry picked from commit 0e917f1b1e18ca9e48b3f91110d3a46b086f7d83) --- src/osd/PG.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index df8c4f3451d..7de0d5573c6 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2674,9 +2674,15 @@ std::pair PG::do_delete_work( &olist, &next); if (!olist.empty()) { - dout(0) << __func__ << " additional unexpected onode list" - <<" (new onodes has appeared since PG removal started" - << olist << dendl; + for (auto& oid : olist) { + if (oid == pgmeta_oid) { + dout(20) << __func__ << " removing pgmeta object " << oid << dendl; + } else { + dout(0) << __func__ << " additional unexpected onode" + <<" new onode has appeared since PG removal started" + << oid << dendl; + } + } } } -- 2.47.3