]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/mds/Mutation.cc
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / mds / Mutation.cc
index 39eee47217baefdd57f6333fca9ced9b10ee6e84..b52e04a63936ef30d7208f1a515e17a8ec27dfe3 100644 (file)
@@ -268,7 +268,7 @@ void MutationImpl::cleanup()
   drop_pins();
 }
 
-void MutationImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+void MutationImpl::_dump_op_descriptor(ostream& stream) const
 {
   stream << "Mutation";
 }
@@ -446,22 +446,17 @@ int MDRequestImpl::compare_paths()
 
 cref_t<MClientRequest> MDRequestImpl::release_client_request()
 {
-  msg_lock.lock();
+  std::lock_guard l(lock);
   cref_t<MClientRequest> req;
   req.swap(client_request);
   client_request = req;
-  msg_lock.unlock();
   return req;
 }
 
 void MDRequestImpl::reset_peer_request(const cref_t<MMDSPeerRequest>& req)
 {
-  msg_lock.lock();
-  cref_t<MMDSPeerRequest> old;
-  old.swap(peer_request);
+  std::lock_guard l(lock);
   peer_request = req;
-  msg_lock.unlock();
-  old.reset();
 }
 
 void MDRequestImpl::print(ostream &out) const
@@ -474,88 +469,89 @@ void MDRequestImpl::print(ostream &out) const
   out << ")";
 }
 
-void MDRequestImpl::dump(Formatter *f) const
-{
-  _dump(f);
-}
-
-void MDRequestImpl::_dump(Formatter *f) const
-{
-  f->dump_string("flag_point", state_string());
-  f->dump_stream("reqid") << reqid;
-  {
-    msg_lock.lock();
-    auto _client_request = client_request;
-    auto _peer_request =peer_request;
-    msg_lock.unlock();
-
-    if (_client_request) {
-      f->dump_string("op_type", "client_request");
-      f->open_object_section("client_info");
-      f->dump_stream("client") << _client_request->get_orig_source();
-      f->dump_int("tid", _client_request->get_tid());
-      f->close_section(); // client_info
-    } else if (is_peer()) { // replies go to an existing mdr
-      f->dump_string("op_type", "peer_request");
-      f->open_object_section("leader_info");
-      f->dump_stream("leader") << peer_to_mds;
-      f->close_section(); // leader_info
-
-      if (_peer_request) {
-        f->open_object_section("request_info");
-        f->dump_int("attempt", _peer_request->get_attempt());
-        f->dump_string("op_type",
-           MMDSPeerRequest::get_opname(_peer_request->get_op()));
-        f->dump_int("lock_type", _peer_request->get_lock_type());
-        f->dump_stream("object_info") << _peer_request->get_object_info();
-        f->dump_stream("srcdnpath") << _peer_request->srcdnpath;
-        f->dump_stream("destdnpath") << _peer_request->destdnpath;
-        f->dump_stream("witnesses") << _peer_request->witnesses;
-        f->dump_bool("has_inode_export",
-           _peer_request->inode_export_v != 0);
-        f->dump_int("inode_export_v", _peer_request->inode_export_v);
-        f->dump_stream("op_stamp") << _peer_request->op_stamp;
-        f->close_section(); // request_info
-      }
-    }
-    else if (internal_op != -1) { // internal request
-      f->dump_string("op_type", "internal_op");
-      f->dump_int("internal_op", internal_op);
-      f->dump_string("op_name", ceph_mds_op_name(internal_op));
-    }
-    else {
-      f->dump_string("op_type", "no_available_op_found");
+void MDRequestImpl::_dump(Formatter *f, bool has_mds_lock) const
+{
+  std::lock_guard l(lock);
+  f->dump_string("flag_point", _get_state_string());
+  f->dump_object("reqid", reqid);
+  if (client_request) {
+    f->dump_string("op_type", "client_request");
+  } else if (is_peer()) { // replies go to an existing mdr
+    f->dump_string("op_type", "peer_request");
+    f->open_object_section("leader_info");
+    f->dump_stream("leader") << peer_to_mds;
+    f->close_section(); // leader_info
+
+    if (peer_request) {
+      f->open_object_section("request_info");
+      f->dump_int("attempt", peer_request->get_attempt());
+      f->dump_string("op_type",
+         MMDSPeerRequest::get_opname(peer_request->get_op()));
+      f->dump_int("lock_type", peer_request->get_lock_type());
+      f->dump_stream("object_info") << peer_request->get_object_info();
+      f->dump_stream("srcdnpath") << peer_request->srcdnpath;
+      f->dump_stream("destdnpath") << peer_request->destdnpath;
+      f->dump_stream("witnesses") << peer_request->witnesses;
+      f->dump_bool("has_inode_export",
+         peer_request->inode_export_v != 0);
+      f->dump_int("inode_export_v", peer_request->inode_export_v);
+      f->dump_stream("op_stamp") << peer_request->op_stamp;
+      f->close_section(); // request_info
     }
   }
+  else if (internal_op != -1) { // internal request
+    f->dump_string("op_type", "internal_op");
+    f->dump_int("internal_op", internal_op);
+    f->dump_string("op_name", ceph_mds_op_name(internal_op));
+  }
+  else {
+    f->dump_string("op_type", "no_available_op_found");
+  }
+
   {
     f->open_array_section("events");
-    std::lock_guard l(lock);
     for (auto& i : events) {
       f->dump_object("event", i);
     }
     f->close_section(); // events
   }
+
+  if (has_mds_lock) {
+    f->open_array_section("locks");
+    for (auto& l : locks) {
+      f->open_object_section("lock");
+      {
+        auto* mdsco = l.lock->get_parent();
+        f->dump_object("object", *mdsco);
+        CachedStackStringStream css;
+        *css << *mdsco;
+        f->dump_string("object_string", css->strv());
+        f->dump_object("lock", *l.lock);
+        f->dump_int("flags", l.flags);
+        f->dump_int("wrlock_target", l.wrlock_target);
+      }
+      f->close_section();
+    }
+    f->close_section();
+  } else {
+    f->dump_null("locks");
+  }
 }
 
-void MDRequestImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+void MDRequestImpl::_dump_op_descriptor(ostream& os) const
 {
-  msg_lock.lock();
-  auto _client_request = client_request;
-  auto _peer_request = peer_request;
-  msg_lock.unlock();
-
-  if (_client_request) {
-    _client_request->print(stream);
-  } else if (_peer_request) {
-    _peer_request->print(stream);
+  if (client_request) {
+    client_request->print(os);
+  } else if (peer_request) {
+    peer_request->print(os);
   } else if (is_peer()) {
-    stream << "peer_request:" << reqid;
+    os << "peer_request:" << reqid;
   } else if (internal_op >= 0) {
-    stream << "internal op " << ceph_mds_op_name(internal_op) << ":" << reqid;
+    os << "internal op " << ceph_mds_op_name(internal_op) << ":" << reqid;
   } else {
     // drat, it's triggered by a peer request, but we don't have a message
     // FIXME
-    stream << "rejoin:" << reqid;
+    os << "rejoin:" << reqid;
   }
 }