summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-02-19 11:01:51 -0800
committerSage Weil <sage@newdream.net>2009-02-19 11:01:51 -0800
commit2d17b3a0d2cea27858d0970ed67d857b1d6f3259 (patch)
treed936c11802c20e272b2c49f6d1bbc2c14de00fea
parent0f05de942d39b213aa3b7390cf2f2497edfe8c25 (diff)
downloadceph-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.cc15
-rw-r--r--src/mds/Server.cc15
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)