]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add a Server::submit_mdlog_entry() to provide event marking
authorGreg Farnum <greg@inktank.com>
Mon, 12 May 2014 20:12:47 +0000 (13:12 -0700)
committerGreg Farnum <greg@inktank.com>
Tue, 13 May 2014 01:27:42 +0000 (18:27 -0700)
Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/MDCache.cc
src/mds/Server.cc
src/mds/Server.h

index 8c68196f49e696eb59a0c7e53c7e54c07017f116..c68755e0db0ccfae1dd56496fea14f27f3ccbce8 100644 (file)
@@ -9353,7 +9353,10 @@ void MDCache::snaprealm_create(MDRequestRef& mdr, CInode *in)
   journal_cow_inode(mut, &le->metablob, in);
   le->metablob.add_primary_dentry(in->get_projected_parent_dn(), in, true);
 
-  mds->mdlog->submit_entry(le, new C_MDC_snaprealm_create_finish(this, mdr, mut, in));
+  mds->server->submit_mdlog_entry(le,
+                                  new C_MDC_snaprealm_create_finish(this, mdr,
+                                                                    mut, in),
+                                  mdr, __func__);
   mds->mdlog->flush();
 }
 
@@ -11654,7 +11657,8 @@ void MDCache::dispatch_fragment_dir(MDRequestRef& mdr)
   */
 
   add_uncommitted_fragment(basedirfrag, info.bits, le->orig_frags, mdr->ls);
-  mds->mdlog->submit_entry(le, new C_MDC_FragmentPrep(this, mdr));
+  mds->server->submit_mdlog_entry(le, new C_MDC_FragmentPrep(this, mdr),
+                                  mdr, __func__);
   mds->mdlog->flush();
 }
 
index 7621652d4735b95d9738732f2b41a9538ea2667a..d2158edea5387ec83e19bfbc2330de446b1a6412 100644 (file)
@@ -797,8 +797,7 @@ void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEv
   early_reply(mdr, in, dn);
   
   mdr->committing = true;
-  mdr->mark_event("submitting journal entry");
-  mdlog->submit_entry(le, fin);
+  submit_mdlog_entry(le, fin, mdr, __func__);
   
   if (mdr->client_request && mdr->client_request->is_replay()) {
     if (mds->queue_one_replay()) {
@@ -813,6 +812,32 @@ void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEv
     mdlog->flush();
 }
 
+class C_MarkEvent : public Context
+{
+  Context *true_finisher;
+  MDRequestRef mdr;
+  string event_str;
+public:
+  C_MarkEvent(Context *f, MDRequestRef& _mdr,
+              const char *evt) :
+                true_finisher(f), mdr(_mdr), event_str("journal_committed: ") {
+    event_str += evt;
+  }
+  virtual void finish(int r) {
+    mdr->mark_event(event_str);
+    true_finisher->complete(r);
+  }
+};
+
+void Server::submit_mdlog_entry(LogEvent *le, Context *fin, MDRequestRef& mdr,
+                                const char *event)
+{
+  string event_str("submit entry: ");
+  event_str += event;
+  mdr->mark_event(event_str);
+  mdlog->submit_entry(le, new C_MarkEvent(fin, mdr, event));
+}
+
 /*
  * send generic response (just an error code), clean up mdr
  */
@@ -2585,7 +2610,7 @@ void Server::handle_client_open(MDRequestRef& mdr)
     mdlog->start_entry(le);
     le->add_clean_inode(cur);
     ls->open_files.push_back(&cur->item_open_file);
-    mds->mdlog->submit_entry(le);
+    mdlog->submit_entry(le);
   }
   
   // hit pop
@@ -4588,7 +4613,8 @@ void Server::handle_slave_link_prep(MDRequestRef& mdr)
   // set up commit waiter
   mdr->more()->slave_commit = new C_MDS_SlaveLinkCommit(this, mdr, targeti);
 
-  mdlog->submit_entry(le, new C_MDS_SlaveLinkPrep(this, mdr, targeti));
+  submit_mdlog_entry(le, new C_MDS_SlaveLinkPrep(this, mdr, targeti),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -4731,7 +4757,8 @@ void Server::do_link_rollback(bufferlist &rbl, int master, MDRequestRef& mdr)
   le->commit.add_dir(parent, true);
   le->commit.add_primary_dentry(in->get_projected_parent_dn(), 0, true);
   
-  mdlog->submit_entry(le, new C_MDS_LoggedLinkRollback(this, mut, mdr));
+  submit_mdlog_entry(le, new C_MDS_LoggedLinkRollback(this, mut, mdr),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -5209,7 +5236,8 @@ void Server::handle_slave_rmdir_prep(MDRequestRef& mdr)
   // set up commit waiter
   mdr->more()->slave_commit = new C_MDS_SlaveRmdirCommit(this, mdr);
 
-  mdlog->submit_entry(le, new C_MDS_SlaveRmdirPrep(this, mdr, dn, straydn));
+  submit_mdlog_entry(le, new C_MDS_SlaveRmdirPrep(this, mdr, dn, straydn),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -5271,7 +5299,7 @@ void Server::_commit_slave_rmdir(MDRequestRef& mdr, int r)
     mdlog->start_entry(le);
     mdr->cleanup();
 
-    mdlog->submit_entry(le, new C_MDS_CommittedSlave(this, mdr));
+    submit_mdlog_entry(le, new C_MDS_CommittedSlave(this, mdr), mdr, __func__);
     mdlog->flush();
   } else {
     // abort
@@ -5337,7 +5365,10 @@ void Server::do_rmdir_rollback(bufferlist &rbl, int master, MDRequestRef& mdr)
 
   mdcache->project_subtree_rename(in, straydn->get_dir(), dn->get_dir());
 
-  mdlog->submit_entry(le, new C_MDS_LoggedRmdirRollback(this, mdr, rollback.reqid, dn, straydn));
+  submit_mdlog_entry(le,
+                     new C_MDS_LoggedRmdirRollback(this, mdr,rollback.reqid,
+                                                   dn, straydn),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -6699,7 +6730,9 @@ void Server::handle_slave_rename_prep(MDRequestRef& mdr)
   bufferlist blah;  // inode import data... obviously not used if we're the slave
   _rename_prepare(mdr, &le->commit, &blah, srcdn, destdn, straydn);
   
-  mdlog->submit_entry(le, new C_MDS_SlaveRenamePrep(this, mdr, srcdn, destdn, straydn));
+  submit_mdlog_entry(le,new C_MDS_SlaveRenamePrep(this, mdr,
+                                                  srcdn, destdn, straydn),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -6828,10 +6861,11 @@ void Server::_commit_slave_rename(MDRequestRef& mdr, int r,
       mdr->more()->is_ambiguous_auth = false;
     }
 
+
     mds->queue_waiters(finished);
     mdr->cleanup();
 
-    mdlog->submit_entry(le, new C_MDS_CommittedSlave(this, mdr));
+    submit_mdlog_entry(le, new C_MDS_CommittedSlave(this, mdr), mdr, __func__);
     mdlog->flush();
   } else {
 
@@ -7128,8 +7162,11 @@ void Server::do_rename_rollback(bufferlist &rbl, int master, MDRequestRef& mdr,
     mdcache->project_subtree_rename(in, destdir, srcdir);
   }
 
-  mdlog->submit_entry(le, new C_MDS_LoggedRenameRollback(this, mut, mdr, srcdn, srcdnpv,
-                                                        destdn, straydn, finish_mdr));
+  submit_mdlog_entry(le,
+                     new C_MDS_LoggedRenameRollback(this, mut, mdr, srcdn,
+                                                    srcdnpv, destdn,
+                                                    straydn, finish_mdr),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -7464,7 +7501,8 @@ void Server::handle_client_mksnap(MDRequestRef& mdr)
   mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
 
   // journal the snaprealm changes
-  mdlog->submit_entry(le, new C_MDS_mksnap_finish(mds, mdr, diri, info));
+  submit_mdlog_entry(le, new C_MDS_mksnap_finish(mds, mdr, diri, info),
+                     mdr, __func__);
   mdlog->flush();
 }
 
@@ -7582,7 +7620,8 @@ void Server::handle_client_rmsnap(MDRequestRef& mdr)
   mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);
   mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
 
-  mdlog->submit_entry(le, new C_MDS_rmsnap_finish(mds, mdr, diri, snapid));
+  submit_mdlog_entry(le, new C_MDS_rmsnap_finish(mds, mdr, diri, snapid),
+                     mdr, __func__);
   mdlog->flush();
 }
 
index 95a5ae423809f7f998e737df16c31a834b18c861..94d401149bca76a8de1d1737fc4c1aa842ca99d5 100644 (file)
@@ -103,6 +103,8 @@ public:
 
   void journal_and_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn,
                         LogEvent *le, Context *fin);
+  void submit_mdlog_entry(LogEvent *le, Context *fin,
+                          MDRequestRef& mdr, const char *evt);
   void dispatch_client_request(MDRequestRef& mdr);
   void early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn);
   void reply_request(MDRequestRef& mdr, int r = 0, CInode *tracei = 0, CDentry *tracedn = 0);