diff options
author | Sage Weil <sage@newdream.net> | 2009-02-19 11:01:51 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-02-19 11:01:51 -0800 |
commit | 2d17b3a0d2cea27858d0970ed67d857b1d6f3259 (patch) | |
tree | d936c11802c20e272b2c49f6d1bbc2c14de00fea | |
parent | 0f05de942d39b213aa3b7390cf2f2497edfe8c25 (diff) | |
download | ceph-2d17b3a0d2cea27858d0970ed67d857b1d6f3259.tar.gz |
mds: only flush journal when we need to
Force a flush every tick just in case.
-rw-r--r-- | src/mds/MDLog.cc | 15 | ||||
-rw-r--r-- | src/mds/Server.cc | 15 |
2 files changed, 25 insertions, 5 deletions
diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index e8db494215d..ceb209bce45 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -188,19 +188,24 @@ void MDLog::submit_entry( LogEvent *le, Context *c, bool wait_safe ) logger->set("ev", num_events); logger->set("wrpos", journaler->get_write_pos()); } - + + unflushed++; + if (c) { - unflushed = 0; if (!g_conf.mds_log_unsafe) wait_safe = true; - journaler->flush(wait_safe ? 0:c); + if (0) { + unflushed = 0; + journaler->flush(); + } + if (wait_safe) journaler->wait_for_flush(0, c); + else + journaler->wait_for_flush(c, 0); } - else - unflushed++; // start a new segment? // FIXME: should this go elsewhere? diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 5b4cc80947b..60e2aa30bb0 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -168,6 +168,7 @@ void Server::handle_client_session(MClientSession *m) pv = ++mds->sessionmap.projected; mdlog->submit_entry(new ESession(m->get_source_inst(), true, pv), new C_MDS_session_finish(mds, session, true, pv)); + mdlog->flush(); break; case CEPH_SESSION_REQUEST_RENEWCAPS: @@ -214,6 +215,7 @@ void Server::handle_client_session(MClientSession *m) mdlog->submit_entry(new ESession(m->get_source_inst(), false, pv, both, piv), new C_MDS_session_finish(mds, session, false, pv, both, piv)); + mdlog->flush(); } break; @@ -317,6 +319,7 @@ void Server::terminate_sessions() version_t pv = ++mds->sessionmap.projected; mdlog->submit_entry(new ESession(session->inst, false, pv), new C_MDS_session_finish(mds, session, false, pv)); + mdlog->flush(); } } @@ -367,6 +370,7 @@ void Server::find_idle_sessions() version_t pv = ++mds->sessionmap.projected; mdlog->submit_entry(new ESession(session->inst, false, pv), new C_MDS_session_finish(mds, session, false, pv)); + mdlog->flush(); } } @@ -400,6 +404,7 @@ void Server::handle_client_reconnect(MClientReconnect *m) version_t pv = ++mds->sessionmap.projected; mdlog->submit_entry(new ESession(session->inst, false, pv), new C_MDS_session_finish(mds, session, false, pv)); + mdlog->flush(); } else { // snaprealms @@ -527,6 +532,8 @@ void Server::journal_and_reply(MDRequest *mdr, CInode *in, CDentry *dn, LogEvent if (mdr->did_early_reply) mds->locker->drop_rdlocks(mdr); + else + mdlog->flush(); } /* @@ -2873,6 +2880,7 @@ void Server::handle_slave_link_prep(MDRequest *mdr) mdcache->journal_dirty_inode(mdr, &le->commit, targeti); mdlog->submit_entry(le, new C_MDS_SlaveLinkPrep(this, mdr, targeti)); + mdlog->flush(); } class C_MDS_SlaveLinkCommit : public Context { @@ -2935,6 +2943,7 @@ void Server::_commit_slave_link(MDRequest *mdr, int r, CInode *targeti) ESlaveUpdate *le = new ESlaveUpdate(mdlog, "slave_link_commit", mdr->reqid, mdr->slave_to_mds, ESlaveUpdate::OP_COMMIT, ESlaveUpdate::LINK); mdlog->submit_entry(le, new C_MDS_CommittedSlave(this, mdr)); + mdlog->flush(); } else { do_link_rollback(mdr->more()->rollback_bl, mdr->slave_to_mds, mdr); } @@ -3015,6 +3024,7 @@ void Server::do_link_rollback(bufferlist &rbl, int master, MDRequest *mdr) le->commit.add_primary_dentry(in->get_parent_dn(), true, 0, pi); mdlog->submit_entry(le, new C_MDS_LoggedLinkRollback(this, mut, mdr)); + mdlog->flush(); } void Server::_link_rollback_finish(Mutation *mut, MDRequest *mdr) @@ -4391,6 +4401,7 @@ void Server::handle_slave_rename_prep(MDRequest *mdr) _rename_prepare(mdr, &le->commit, &blah, srcdn, destdn, straydn); mdlog->submit_entry(le, new C_MDS_SlaveRenamePrep(this, mdr, srcdn, destdn, straydn)); + mdlog->flush(); } else { // don't journal. dout(10) << "not journaling: i'm not auth for anything, and srci has no caps" << dendl; @@ -4491,6 +4502,7 @@ void Server::_commit_slave_rename(MDRequest *mdr, int r, mdr->cleanup(); mdlog->submit_entry(le, new C_MDS_CommittedSlave(this, mdr)); + mdlog->flush(); } else { if (srcdn->is_auth() && destdnl->is_primary() && destdnl->get_inode()->state_test(CInode::STATE_AMBIGUOUSAUTH)) { @@ -4717,6 +4729,7 @@ void Server::do_rename_rollback(bufferlist &rbl, int master, MDRequest *mdr) mdlog->submit_entry(le, new C_MDS_LoggedRenameRollback(this, mut, mdr, srcdnl->get_inode(), destdn->get_dir())); + mdlog->flush(); } void Server::_rename_rollback_finish(Mutation *mut, MDRequest *mdr, CInode *in, CDir *olddir) @@ -5401,6 +5414,7 @@ void Server::handle_client_mksnap(MDRequest *mdr) le->metablob.add_primary_dentry(diri->get_projected_parent_dn(), true, 0, pi, 0, &snapbl); mdlog->submit_entry(le, new C_MDS_mksnap_finish(mds, mdr, diri, info)); + mdlog->flush(); } void Server::_mksnap_finish(MDRequest *mdr, CInode *diri, SnapInfo &info) @@ -5546,6 +5560,7 @@ void Server::handle_client_rmsnap(MDRequest *mdr) le->metablob.add_primary_dentry(diri->get_projected_parent_dn(), true, 0, pi, 0, &snapbl); mdlog->submit_entry(le, new C_MDS_rmsnap_finish(mds, mdr, diri, snapid)); + mdlog->flush(); } void Server::_rmsnap_finish(MDRequest *mdr, CInode *diri, snapid_t snapid) |