From: Patrick Donnelly Date: Thu, 27 Jul 2023 00:17:02 +0000 (-0400) Subject: mds: avoid recursive locks dumping state X-Git-Tag: v19.0.0~692^2~9 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=60d1bdb1f53723249746d64c660f88aa79cd5b35;p=ceph-ci.git mds: avoid recursive locks dumping state Also: fix return to std::string. A string_view is not a thread-safe return. Signed-off-by: Patrick Donnelly --- diff --git a/src/common/TrackedOp.h b/src/common/TrackedOp.h index 49ddf019bdd..af0e036baf4 100644 --- a/src/common/TrackedOp.h +++ b/src/common/TrackedOp.h @@ -392,9 +392,9 @@ public: warn_interval_multiplier = 0; } - virtual std::string_view state_string() const { + std::string state_string() const { std::lock_guard l(lock); - return events.empty() ? std::string_view() : std::string_view(events.rbegin()->str); + return _get_state_string(); } void dump(utime_t now, ceph::Formatter *f) const; @@ -414,6 +414,11 @@ public: friend void intrusive_ptr_release(TrackedOp *o) { o->put(); } + +protected: + virtual std::string _get_state_string() const { + return events.empty() ? std::string() : std::string(events.rbegin()->str); + } }; diff --git a/src/mds/Mutation.cc b/src/mds/Mutation.cc index 6a244b154c9..518c68b679c 100644 --- a/src/mds/Mutation.cc +++ b/src/mds/Mutation.cc @@ -481,7 +481,7 @@ void MDRequestImpl::dump(Formatter *f) const void MDRequestImpl::_dump(Formatter *f) const { - f->dump_string("flag_point", state_string()); + f->dump_string("flag_point", _get_state_string()); f->dump_stream("reqid") << reqid; { msg_lock.lock(); diff --git a/src/osd/OpRequest.h b/src/osd/OpRequest.h index c1a69e08e7e..8df4f25d53e 100644 --- a/src/osd/OpRequest.h +++ b/src/osd/OpRequest.h @@ -113,7 +113,7 @@ public: return latest_flag_point; } - std::string_view state_string() const override { + std::string _get_state_string() const override { switch(latest_flag_point) { case flag_queued_for_pg: return "queued for pg"; case flag_reached_pg: return "reached pg";