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()) {
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
*/
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
// 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();
}
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();
}
// 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();
}
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
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();
}
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();
}
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 {
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();
}
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();
}
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();
}