drop_pins();
}
-void MutationImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+void MutationImpl::_dump_op_descriptor(ostream& stream) const
{
stream << "Mutation";
}
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
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;
}
}