mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, "create system file");
-
+ mds->mdlog->start_entry(le);
+
predirty_journal_parents(mut, &le->metablob, in, dir, PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, true, in);
if (mdir)
Mutation *mut = new Mutation;
mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, "subtree merge writebehind");
+ mds->mdlog->start_entry(le);
+
le->metablob.add_dir_context(in->get_parent_dn()->get_dir());
journal_dirty_inode(mut, &le->metablob, in);
bool do_parent_mtime = flags & PREDIRTY_DIR;
bool shallow = flags & PREDIRTY_SHALLOW;
+ assert(mds->mdlog->entry_is_open());
+
// declare now?
if (mut->now == utime_t())
mut->now = g_clock.real_now();
void MDCache::log_master_commit(metareqid_t reqid)
{
dout(10) << "log_master_commit " << reqid << dendl;
- mds->mdlog->submit_entry(new ECommitted(reqid),
- new C_MDC_CommittedMaster(this, reqid,
- uncommitted_masters[reqid].ls,
- uncommitted_masters[reqid].waiters));
+ mds->mdlog->start_submit_entry(new ECommitted(reqid),
+ new C_MDC_CommittedMaster(this, reqid,
+ uncommitted_masters[reqid].ls,
+ uncommitted_masters[reqid].waiters));
mds->mdcache->uncommitted_masters.erase(reqid);
}
<< dendl;
ESubtreeMap *le = new ESubtreeMap();
+ mds->mdlog->start_entry(le);
+
CDir *mydir = 0;
if (myin) {
// replay
assert(uncommitted_slave_updates[from].count(*p));
// log commit
- mds->mdlog->submit_entry(new ESlaveUpdate(mds->mdlog, "unknown", *p, from,
- ESlaveUpdate::OP_COMMIT, uncommitted_slave_updates[from][*p]->origop));
+ mds->mdlog->start_submit_entry(new ESlaveUpdate(mds->mdlog, "unknown", *p, from,
+ ESlaveUpdate::OP_COMMIT,
+ uncommitted_slave_updates[from][*p]->origop));
delete uncommitted_slave_updates[from][*p];
uncommitted_slave_updates[from].erase(*p);
if (dir->authority().first != CDIR_AUTH_UNKNOWN) {
dout(10) << "ambiguous import auth known, must not be me " << *dir << dendl;
cancel_ambiguous_import(q->first);
- mds->mdlog->submit_entry(new EImportFinish(dir, false));
+ mds->mdlog->start_submit_entry(new EImportFinish(dir, false));
} else {
dout(10) << "ambiguous import auth unknown, must be me " << *dir << dendl;
finish_ambiguous_import(q->first);
- mds->mdlog->submit_entry(new EImportFinish(dir, true));
+ mds->mdlog->start_submit_entry(new EImportFinish(dir, true));
}
}
assert(my_ambiguous_imports.empty());
Mutation *mut = new Mutation;
mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, "queue_file_recover cow");
+ mds->mdlog->start_entry(le);
predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY);
s.erase(*s.begin());
mut->add_projected_inode(in);
EUpdate *le = new EUpdate(mds->mdlog, "truncate finish");
+ mds->mdlog->start_entry(le);
le->metablob.add_dir_context(in->get_parent_dir());
le->metablob.add_primary_dentry(in->get_projected_parent_dn(), true, in);
le->metablob.add_truncate_finish(in->ino(), ls->offset);
Mutation *mut = new Mutation;
mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, add ? "anchor_create":"anchor_destroy");
+ mds->mdlog->start_entry(le);
predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY);
journal_dirty_inode(mut, &le->metablob, in);
le->metablob.add_table_transaction(TABLE_ANCHOR, atid);
Mutation *mut = new Mutation;
mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, "snaprealm_create");
+ mds->mdlog->start_entry(le);
+
le->metablob.add_table_transaction(TABLE_SNAP, mdr->more()->stid);
inode_t *pi = in->project_inode();
version_t pdv = dn->pre_dirty();
EUpdate *le = new EUpdate(mds->mdlog, "purge_stray");
+ mds->mdlog->start_entry(le);
+
le->metablob.add_dir_context(dn->dir);
le->metablob.add_null_dentry(dn, true);
le->metablob.add_destroyed_inode(in->ino());
mdr->ls = mds->mdlog->get_current_segment();
EFragment *le = new EFragment(mds->mdlog, diri->ino(), basefrag, bits);
+ mds->mdlog->start_entry(le);
+
le->metablob.add_dir_context(*resultfrags.begin());
// dft lock
mds->sessionmap.set_state(session, Session::STATE_OPENING);
mds->sessionmap.touch_session(session);
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->start_submit_entry(new ESession(m->get_source_inst(), true, pv),
+ new C_MDS_session_finish(mds, session, true, pv));
mdlog->flush();
break;
} else
piv = 0;
- 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->start_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;
if (session->is_closing()) continue;
mds->sessionmap.set_state(session, Session::STATE_CLOSING);
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->start_submit_entry(new ESession(session->inst, false, pv),
+ new C_MDS_session_finish(mds, session, false, pv));
mdlog->flush();
}
}
assert(session->is_stale_purging());
mds->sessionmap.set_state(session, Session::STATE_STALE_CLOSING);
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->start_submit_entry(new ESession(session->inst, false, pv),
+ new C_MDS_session_finish(mds, session, false, pv));
mdlog->flush();
}
dout(7) << " client had no session, removing from session map" << dendl;
assert(session); // ?
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->start_submit_entry(new ESession(session->inst, false, pv),
+ new C_MDS_session_finish(mds, session, false, pv));
mdlog->flush();
} else {
if (!cur->xlist_open_file.is_on_xlist()) {
LogSegment *ls = mds->mdlog->get_current_segment();
EOpen *le = new EOpen(mds->mdlog);
+ mdlog->start_entry(le);
le->add_clean_inode(cur);
ls->open_files.push_back(&cur->xlist_open_file);
mds->mdlog->submit_entry(le);
// prepare finisher
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "openc");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
journal_allocated_inos(mdr, &le->metablob);
mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
// project update
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "setattr");
+ mdlog->start_entry(le);
pi = cur->project_inode();
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "open_truncate");
+ mdlog->start_entry(le);
le->metablob.add_truncate_start(in->ino());
le->metablob.add_client_req(mdr->reqid);
// log + wait
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "setlayout");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
// log + wait
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "setxattr");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
mdcache->journal_cow_inode(mdr, &le->metablob, cur);
// log + wait
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "removexattr");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
mdcache->journal_cow_inode(mdr, &le->metablob, cur);
// prepare finisher
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "mknod");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
journal_allocated_inos(mdr, &le->metablob);
// prepare finisher
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "mkdir");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
journal_allocated_inos(mdr, &le->metablob);
mdcache->predirty_journal_parents(mdr, &le->metablob, newi, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
// prepare finisher
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "symlink");
+ mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid());
journal_allocated_inos(mdr, &le->metablob);
mdcache->predirty_journal_parents(mdr, &le->metablob, newi, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
// log + wait
EUpdate *le = new EUpdate(mdlog, "link_local");
+ mdlog->start_entry(le);
le->metablob.add_client_req(mdr->reqid);
mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1); // new dn
mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, 0, PREDIRTY_PRIMARY); // targeti
// add to event
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, inc ? "link_remote":"unlink_remote");
+ mdlog->start_entry(le);
le->metablob.add_client_req(mdr->reqid);
if (!mdr->more()->slaves.empty()) {
dout(20) << " noting uncommitted_slaves " << mdr->more()->slaves << dendl;
mdr->ls = mdlog->get_current_segment();
ESlaveUpdate *le = new ESlaveUpdate(mdlog, "slave_link_prep", mdr->reqid, mdr->slave_to_mds,
ESlaveUpdate::OP_PREPARE, ESlaveUpdate::LINK);
+ mdlog->start_entry(le);
inode_t *pi = dnl->get_inode()->project_inode();
// write a commit to the journal
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->start_submit_entry(le, new C_MDS_CommittedSlave(this, mdr));
mdlog->flush();
} else {
do_link_rollback(mdr->more()->rollback_bl, mdr->slave_to_mds, mdr);
// journal it
ESlaveUpdate *le = new ESlaveUpdate(mdlog, "slave_link_rollback", rollback.reqid, master,
ESlaveUpdate::OP_ROLLBACK, ESlaveUpdate::LINK);
+ mdlog->start_entry(le);
le->commit.add_dir_context(parent);
le->commit.add_dir(parent, true);
le->commit.add_primary_dentry(in->get_parent_dn(), true, 0);
// prepare log entry
EUpdate *le = new EUpdate(mdlog, "unlink_local");
+ mdlog->start_entry(le);
le->metablob.add_client_req(mdr->reqid);
if (straydn) {
// -- prepare journal entry --
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "rename");
+ mdlog->start_entry(le);
le->metablob.add_client_req(mdr->reqid);
if (!mdr->more()->slaves.empty()) {
dout(20) << " noting uncommitted_slaves " << mdr->more()->slaves << dendl;
mdr->ls = mdlog->get_current_segment();
ESlaveUpdate *le = new ESlaveUpdate(mdlog, "slave_rename_prep", mdr->reqid, mdr->slave_to_mds,
ESlaveUpdate::OP_PREPARE, ESlaveUpdate::RENAME);
+ mdlog->start_entry(le);
le->rollback = mdr->more()->rollback_bl;
bufferlist blah; // inode import data... obviously not used if we're the slave
ESlaveUpdate *le;
if (r == 0) {
// write a commit to the journal
- le = new ESlaveUpdate(mdlog, "slave_rename_commit", mdr->reqid, mdr->slave_to_mds, ESlaveUpdate::OP_COMMIT, ESlaveUpdate::RENAME);
+ le = new ESlaveUpdate(mdlog, "slave_rename_commit", mdr->reqid, mdr->slave_to_mds,
+ ESlaveUpdate::OP_COMMIT, ESlaveUpdate::RENAME);
+ mdlog->start_entry(le);
// unfreeze+singleauth inode
// hmm, do i really need to delay this?
// journal it
ESlaveUpdate *le = new ESlaveUpdate(mdlog, "slave_rename_rollback", rollback.reqid, master,
ESlaveUpdate::OP_ROLLBACK, ESlaveUpdate::RENAME);
+ mdlog->start_entry(le);
+
le->commit.add_dir_context(srcdir);
le->commit.add_primary_dentry(srcdn, true, 0);
le->commit.add_dir_context(destdir);
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "mksnap");
+ mdlog->start_entry(le);
+
le->metablob.add_client_req(req->get_reqid());
le->metablob.add_table_transaction(TABLE_SNAP, stid);
mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "rmsnap");
+ mdlog->start_entry(le);
+
le->metablob.add_client_req(req->get_reqid());
le->metablob.add_table_transaction(TABLE_SNAP, stid);
mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);