From: Yan, Zheng Date: Tue, 24 Jun 2014 07:47:30 +0000 (+0800) Subject: mds: pass finish context to MDlog::submit_entry() X-Git-Tag: v0.84~138^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0690078cf8e8fe890bc8a22aca22004e1da761d1;p=ceph.git mds: pass finish context to MDlog::submit_entry() Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 13a42f022bd..8a52d33ba98 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -2795,9 +2795,8 @@ void Locker::_do_snap_update(CInode *in, snapid_t snap, int dirty, snapid_t foll mdcache->predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY, 0, follows); mdcache->journal_dirty_inode(mut.get(), &le->metablob, in, follows); - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_Locker_FileUpdate_finish(this, in, mut, false, - client, NULL, ack)); + mds->mdlog->submit_entry(le, new C_Locker_FileUpdate_finish(this, in, mut, false, + client, NULL, ack)); } @@ -3033,9 +3032,8 @@ bool Locker::_do_cap_update(CInode *in, Capability *cap, mdcache->predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY, 0, follows); mdcache->journal_dirty_inode(mut.get(), &le->metablob, in, follows); - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_Locker_FileUpdate_finish(this, in, mut, change_max, - client, cap, ack)); + mds->mdlog->submit_entry(le, new C_Locker_FileUpdate_finish(this, in, mut, change_max, + client, cap, ack)); // only flush immediately if the lock is unstable, or unissued caps are wanted, or max_size is // changing if (((dirty & (CEPH_CAP_FILE_EXCL|CEPH_CAP_FILE_WR)) && !in->filelock.is_stable()) || @@ -3904,8 +3902,7 @@ void Locker::scatter_writebehind(ScatterLock *lock) in->finish_scatter_gather_update_accounted(lock->get_type(), mut, &le->metablob); - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_Locker_ScatterWB(this, lock, mut)); + mds->mdlog->submit_entry(le, new C_Locker_ScatterWB(this, lock, mut)); } void Locker::scatter_writebehind_finish(ScatterLock *lock, MutationRef& mut) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 8737fd2c791..e3e352a8066 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -468,8 +468,7 @@ void MDCache::_create_system_file(CDir *dir, const char *name, CInode *in, Conte if (mdir) le->metablob.add_new_dir(mdir); // dirty AND complete AND new - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_MDC_CreateSystemFile(this, mut, dn, dpv, fin)); + mds->mdlog->submit_entry(le, new C_MDC_CreateSystemFile(this, mut, dn, dpv, fin)); mds->mdlog->flush(); } @@ -876,8 +875,7 @@ void MDCache::try_subtree_merge_at(CDir *dir, bool do_eval) le->metablob.add_dir_context(in->get_parent_dn()->get_dir()); journal_dirty_inode(mut.get(), &le->metablob, in); - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_MDC_SubtreeMergeWB(this, in, mut)); + mds->mdlog->submit_entry(le, new C_MDC_SubtreeMergeWB(this, in, mut)); mds->mdlog->flush(); } } @@ -3096,8 +3094,8 @@ void MDCache::handle_resolve_ack(MMDSResolveAck *ack) // log commit mds->mdlog->start_submit_entry(new ESlaveUpdate(mds->mdlog, "unknown", p->first, from, - ESlaveUpdate::OP_COMMIT, su->origop)); - mds->mdlog->wait_for_safe(new C_MDC_SlaveCommit(this, from, p->first)); + ESlaveUpdate::OP_COMMIT, su->origop), + new C_MDC_SlaveCommit(this, from, p->first)); mds->mdlog->flush(); finish_uncommitted_slave_update(p->first, from); diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index d9dfd4ad2d6..11019633956 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -286,14 +286,10 @@ void MDLog::cap() // ----------------------------- // segments -void MDLog::start_new_segment(Context *onsync) +void MDLog::start_new_segment() { prepare_new_segment(); - journal_segment_subtree_map(); - if (onsync) { - wait_for_safe(onsync); - flush(); - } + journal_segment_subtree_map(NULL); } void MDLog::prepare_new_segment() @@ -311,10 +307,10 @@ void MDLog::prepare_new_segment() mds->mdcache->advance_stray(); } -void MDLog::journal_segment_subtree_map() +void MDLog::journal_segment_subtree_map(Context *onsync) { dout(7) << __func__ << dendl; - submit_entry(mds->mdcache->create_subtree_map()); + submit_entry(mds->mdcache->create_subtree_map(), onsync); } void MDLog::trim(int m) diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index b3745356073..a04b2f8251b 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -174,9 +174,9 @@ public: // -- segments -- - void start_new_segment(Context *onsync=0); + void start_new_segment(); void prepare_new_segment(); - void journal_segment_subtree_map(); + void journal_segment_subtree_map(Context *onsync=0); LogSegment *peek_current_segment() { return segments.empty() ? NULL : segments.rbegin()->second; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 3c54ab949e5..e97deb0f824 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1311,8 +1311,7 @@ void MDS::boot_create() assert(g_conf->mds_kill_create_at != 1); // ok now journal it - mdlog->journal_segment_subtree_map(); - mdlog->wait_for_safe(fin.new_sub()); + mdlog->journal_segment_subtree_map(fin.new_sub()); mdlog->flush(); fin.activate(); @@ -1424,7 +1423,7 @@ void MDS::starting_done() mdcache->open_root(); // start new segment - mdlog->start_new_segment(0); + mdlog->start_new_segment(); } diff --git a/src/mds/MDSTableServer.cc b/src/mds/MDSTableServer.cc index b7752468c24..f72ecc6e5d0 100644 --- a/src/mds/MDSTableServer.cc +++ b/src/mds/MDSTableServer.cc @@ -87,8 +87,8 @@ void MDSTableServer::handle_commit(MMDSTableRequest *req) _note_commit(tid); mds->mdlog->start_submit_entry(new ETableServer(table, TABLESERVER_OP_COMMIT, 0, -1, - tid, version)); - mds->mdlog->wait_for_safe(new C_Commit(this, req)); + tid, version), + new C_Commit(this, req)); } else if (tid <= version) { dout(0) << "got commit for tid " << tid << " <= " << version diff --git a/src/mds/Migrator.cc b/src/mds/Migrator.cc index 7ba90029ce3..f7f13752302 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -1567,8 +1567,7 @@ void Migrator::handle_export_ack(MExportDirAck *m) } // log export completion, then finish (unfreeze, trigger finish context, etc.) - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(new C_MDS_ExportFinishLogged(this, dir)); + mds->mdlog->submit_entry(le, new C_MDS_ExportFinishLogged(this, dir)); mds->mdlog->flush(); assert (g_conf->mds_kill_export_at != 10); @@ -2252,8 +2251,7 @@ void Migrator::handle_export_dir(MExportDir *m) assert (g_conf->mds_kill_import_at != 6); // log it - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(onlogged); + mds->mdlog->submit_entry(le, onlogged); mds->mdlog->flush(); // some stats @@ -3031,9 +3029,7 @@ void Migrator::handle_export_caps(MExportCaps *ex) version_t pv = mds->server->prepare_force_open_sessions(finish->client_map, finish->sseqmap); ESessions *le = new ESessions(pv, ex->client_map); - mds->mdlog->start_entry(le); - mds->mdlog->submit_entry(le); - mds->mdlog->wait_for_safe(finish); + mds->mdlog->start_submit_entry(le, finish); mds->mdlog->flush(); ex->put();