]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: guard close_section calls in get_perf_schema_python 69436/head
authorLumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
Sat, 4 Apr 2026 15:25:15 +0000 (17:25 +0200)
committerPatrick Donnelly <pdonnell@ibm.com>
Fri, 12 Jun 2026 13:29:43 +0000 (09:29 -0400)
When a daemon exists in the daemon state map but has no perf counters
(e.g. an OSD that was running but is now down or destroyed), the loop
in get_perf_schema_python never executes, leaving prev_key_name empty
and no formatter sections opened. The unconditional close_section()
calls after the loop then trigger an assertion failure in PyFormatter
(cursor != root).

Add the same `if (!prev_key_name.empty())` guard that already protects
the close_section() calls inside the loop, so we only close sections
that were actually opened.

Fixes: https://tracker.ceph.com/issues/75745
Signed-off-by: Lumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
(cherry picked from commit b1c1ddaf0b771420e0905cd47e33919de5e11fd5)

src/mgr/ActivePyModules.cc

index 5e0b385bf94a210d5127d05be5b050461e207720..58cff3a8388e5f9ddd93b61986fd85713b201d9d 100644 (file)
@@ -1263,8 +1263,10 @@ PyObject* ActivePyModules::get_perf_schema_python(
                << dendl;
          }
        }
-       f.close_section();  // close 'counters'
-       f.close_section();  // close 'counter object' section
+       if (!prev_key_name.empty()) {
+         f.close_section();  // close 'counters'
+         f.close_section();  // close 'counter object' section
+       }
       });
     }
   } else {