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>
<< 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 {