From ca313c20bec871ee4958bc7af23b9a46924513ce Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Mon, 12 May 2014 13:12:47 -0700 Subject: [PATCH] mds: add a Server::submit_mdlog_entry() to provide event marking Signed-off-by: Greg Farnum --- src/mds/MDCache.cc | 8 ++++-- src/mds/Server.cc | 67 ++++++++++++++++++++++++++++++++++++---------- src/mds/Server.h | 2 ++ 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 8c68196f49e69..c68755e0db0cc 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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(); } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 7621652d4735b..d2158edea5387 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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(); } diff --git a/src/mds/Server.h b/src/mds/Server.h index 95a5ae423809f..94d401149bca7 100644 --- a/src/mds/Server.h +++ b/src/mds/Server.h @@ -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); -- 2.39.5