]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: avoid recursive locks dumping state
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 27 Jul 2023 00:17:02 +0000 (20:17 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 8 Aug 2023 12:58:40 +0000 (08:58 -0400)
Also: fix return to std::string. A string_view is not a thread-safe return.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/common/TrackedOp.h
src/mds/Mutation.cc
src/osd/OpRequest.h

index 49ddf019bdd0b4c77359c939b233c47e3fb51d17..af0e036baf4438e9bb4c5e6a59f2676a5ee7281f 100644 (file)
@@ -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);
+  }
 };
 
 
index 6a244b154c94ee96944c8db680d121f4ae17234e..518c68b679c7cfbca69f580bb89b038fa01f5079 100644 (file)
@@ -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();
index c1a69e08e7e84e6b5bd4055c65d4e8fe02658852..8df4f25d53e595348eeccb7f89ae74fa768f458b 100644 (file)
@@ -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";