]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/mds/Mutation.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / mds / Mutation.cc
index 10b211ecabe6ff07e6ec0f36511d2a623106a92f..7e3fb22bd20e56cac7710ef40c88873df1b302ba 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "Mutation.h"
 #include "ScatterLock.h"
+#include "CInode.h"
 #include "CDir.h"
 
 // MutationImpl
@@ -215,33 +216,6 @@ void MutationImpl::_clear_remote_auth_pinned(ObjectState &stat)
   --num_remote_auth_pins;
 }
 
-void MutationImpl::add_projected_inode(CInode *in)
-{
-  projected_inodes.push_back(in);
-}
-
-void MutationImpl::pop_and_dirty_projected_inodes()
-{
-  while (!projected_inodes.empty()) {
-    CInode *in = projected_inodes.front();
-    projected_inodes.pop_front();
-    in->pop_and_dirty_projected_inode(ls);
-  }
-}
-
-void MutationImpl::add_projected_fnode(CDir *dir)
-{
-  projected_fnodes.push_back(dir);
-}
-
-void MutationImpl::pop_and_dirty_projected_fnodes()
-{
-  for (const auto& dir : projected_fnodes) {
-    dir->pop_and_dirty_projected_fnode(ls);
-  }
-  projected_fnodes.clear();
-}
-
 void MutationImpl::add_updated_lock(ScatterLock *lock)
 {
   updated_locks.push_back(lock);
@@ -256,24 +230,34 @@ void MutationImpl::add_cow_inode(CInode *in)
 void MutationImpl::add_cow_dentry(CDentry *dn)
 {
   pin(dn);
-  dirty_cow_dentries.push_back(pair<CDentry*,version_t>(dn, dn->get_projected_version()));
+  dirty_cow_dentries.emplace_back(dn, dn->get_projected_version());
 }
 
 void MutationImpl::apply()
 {
-  pop_and_dirty_projected_inodes();
-  pop_and_dirty_projected_fnodes();
-  
+  for (auto& obj : projected_nodes) {
+    if (CInode *in = dynamic_cast<CInode*>(obj))
+      in->pop_and_dirty_projected_inode(ls, nullptr);
+  }
+
   for (const auto& in : dirty_cow_inodes) {
     in->_mark_dirty(ls);
   }
-  for (const auto& [dentry, v] : dirty_cow_dentries) {
-    dentry->mark_dirty(v, ls);
+
+  for (const auto& [dn, v] : dirty_cow_dentries) {
+    dn->mark_dirty(v, ls);
   }
-  
+
+  for (auto& obj : projected_nodes) {
+    if (CDir *dir = dynamic_cast<CDir*>(obj))
+      dir->pop_and_dirty_projected_fnode(ls, nullptr);
+  }
+
   for (const auto& lock : updated_locks) {
     lock->mark_dirty();
   }
+
+  projected_nodes.clear();
 }
 
 void MutationImpl::cleanup()
@@ -311,14 +295,14 @@ bool MDRequestImpl::has_witnesses()
   return (_more != nullptr) && (!_more->witnessed.empty());
 }
 
-bool MDRequestImpl::slave_did_prepare()
+bool MDRequestImpl::peer_did_prepare()
 {
-  return has_more() && more()->slave_commit;
+  return has_more() && more()->peer_commit;
 }
 
-bool MDRequestImpl::slave_rolling_back()
+bool MDRequestImpl::peer_rolling_back()
 {
-  return has_more() && more()->slave_rolling_back;
+  return has_more() && more()->peer_rolling_back;
 }
 
 bool MDRequestImpl::freeze_auth_pin(CInode *inode)
@@ -468,12 +452,12 @@ cref_t<MClientRequest> MDRequestImpl::release_client_request()
   return req;
 }
 
-void MDRequestImpl::reset_slave_request(const cref_t<MMDSSlaveRequest>& req)
+void MDRequestImpl::reset_peer_request(const cref_t<MMDSPeerRequest>& req)
 {
   msg_lock.lock();
-  cref_t<MMDSSlaveRequest> old;
-  old.swap(slave_request);
-  slave_request = req;
+  cref_t<MMDSPeerRequest> old;
+  old.swap(peer_request);
+  peer_request = req;
   msg_lock.unlock();
   old.reset();
 }
@@ -482,9 +466,9 @@ void MDRequestImpl::print(ostream &out) const
 {
   out << "request(" << reqid << " nref=" << nref;
   //if (request) out << " " << *request;
-  if (is_slave()) out << " slave_to mds." << slave_to_mds;
+  if (is_peer()) out << " peer_to mds." << peer_to_mds;
   if (client_request) out << " cr=" << client_request;
-  if (slave_request) out << " sr=" << slave_request;
+  if (peer_request) out << " sr=" << peer_request;
   out << ")";
 }
 
@@ -500,7 +484,7 @@ void MDRequestImpl::_dump(Formatter *f) const
   {
     msg_lock.lock();
     auto _client_request = client_request;
-    auto _slave_request =slave_request;
+    auto _peer_request =peer_request;
     msg_lock.unlock();
 
     if (_client_request) {
@@ -509,26 +493,28 @@ void MDRequestImpl::_dump(Formatter *f) const
       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_slave() && _slave_request) { // replies go to an existing mdr
-      f->dump_string("op_type", "slave_request");
-      f->open_object_section("master_info");
-      f->dump_stream("master") << _slave_request->get_orig_source();
-      f->close_section(); // master_info
-
-      f->open_object_section("request_info");
-      f->dump_int("attempt", _slave_request->get_attempt());
-      f->dump_string("op_type",
-         MMDSSlaveRequest::get_opname(_slave_request->get_op()));
-      f->dump_int("lock_type", _slave_request->get_lock_type());
-      f->dump_stream("object_info") << _slave_request->get_object_info();
-      f->dump_stream("srcdnpath") << _slave_request->srcdnpath;
-      f->dump_stream("destdnpath") << _slave_request->destdnpath;
-      f->dump_stream("witnesses") << _slave_request->witnesses;
-      f->dump_bool("has_inode_export",
-         _slave_request->inode_export_v != 0);
-      f->dump_int("inode_export_v", _slave_request->inode_export_v);
-      f->dump_stream("op_stamp") << _slave_request->op_stamp;
-      f->close_section(); // request_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");
@@ -553,17 +539,19 @@ void MDRequestImpl::_dump_op_descriptor_unlocked(ostream& stream) const
 {
   msg_lock.lock();
   auto _client_request = client_request;
-  auto _slave_request = slave_request;
+  auto _peer_request = peer_request;
   msg_lock.unlock();
 
   if (_client_request) {
     _client_request->print(stream);
-  } else if (_slave_request) {
-    _slave_request->print(stream);
+  } else if (_peer_request) {
+    _peer_request->print(stream);
+  } else if (is_peer()) {
+    stream << "peer_request:" << reqid;
   } else if (internal_op >= 0) {
     stream << "internal op " << ceph_mds_op_name(internal_op) << ":" << reqid;
   } else {
-    // drat, it's triggered by a slave request, but we don't have a message
+    // drat, it's triggered by a peer request, but we don't have a message
     // FIXME
     stream << "rejoin:" << reqid;
   }