explicit MDCacheIOContext(MDCache *mdc_) : mdcache(mdc_) {}
};
+class MDCacheLogContext : public virtual MDSLogContextBase {
+protected:
+ MDCache *mdcache;
+ virtual MDSRank *get_mds()
+ {
+ assert(mdcache != NULL);
+ return mdcache->mds;
+ }
+public:
+ explicit MDCacheLogContext(MDCache *mdc_) : mdcache(mdc_) {}
+};
MDCache::MDCache(MDSRank *m) :
mds(m),
myin->store(gather->new_sub());
}
-struct C_MDC_CreateSystemFile : public MDCacheContext {
+struct C_MDC_CreateSystemFile : public MDCacheLogContext {
MutationRef mut;
CDentry *dn;
version_t dpv;
MDSInternalContextBase *fin;
C_MDC_CreateSystemFile(MDCache *c, MutationRef& mu, CDentry *d, version_t v, MDSInternalContextBase *f) :
- MDCacheContext(c), mut(mu), dn(d), dpv(v), fin(f) {}
+ MDCacheLogContext(c), mut(mu), dn(d), dpv(v), fin(f) {}
void finish(int r) {
mdcache->_create_system_file_finish(mut, dn, dpv, fin);
}
try_subtree_merge_at(*p);
}
-class C_MDC_SubtreeMergeWB : public MDCacheContext {
+class C_MDC_SubtreeMergeWB : public MDCacheLogContext {
CInode *in;
MutationRef mut;
public:
- C_MDC_SubtreeMergeWB(MDCache *mdc, CInode *i, MutationRef& m) : MDCacheContext(mdc), in(i), mut(m) {}
+ C_MDC_SubtreeMergeWB(MDCache *mdc, CInode *i, MutationRef& m) : MDCacheLogContext(mdc), in(i), mut(m) {}
void finish(int r) {
mdcache->subtree_merge_writebehind_finish(in, mut);
}
* remove them from the uncommitted_masters map (used during recovery
* to commit|abort slaves).
*/
-struct C_MDC_CommittedMaster : public MDCacheContext {
+struct C_MDC_CommittedMaster : public MDCacheLogContext {
metareqid_t reqid;
- C_MDC_CommittedMaster(MDCache *s, metareqid_t r) : MDCacheContext(s), reqid(r) {}
+ C_MDC_CommittedMaster(MDCache *s, metareqid_t r) : MDCacheLogContext(s), reqid(r) {}
void finish(int r) {
mdcache->_logged_master_commit(reqid);
}
* masters when it reaches up:active (all other recovering nodes must
* complete resolve before that happens).
*/
-struct C_MDC_SlaveCommit : public MDCacheContext {
+struct C_MDC_SlaveCommit : public MDCacheLogContext {
mds_rank_t from;
metareqid_t reqid;
- C_MDC_SlaveCommit(MDCache *c, int f, metareqid_t r) : MDCacheContext(c), from(f), reqid(r) {}
+ C_MDC_SlaveCommit(MDCache *c, int f, metareqid_t r) : MDCacheLogContext(c), from(f), reqid(r) {}
void finish(int r) {
mdcache->_logged_slave_commit(from, reqid);
}
}
}
-class C_MDC_RejoinSessionsOpened : public MDCacheContext {
+class C_MDC_RejoinSessionsOpened : public MDCacheLogContext {
public:
map<client_t,entity_inst_t> client_map;
map<client_t,uint64_t> sseqmap;
C_MDC_RejoinSessionsOpened(MDCache *c, map<client_t,entity_inst_t>& cm) :
- MDCacheContext(c), client_map(cm) {}
+ MDCacheLogContext(c), client_map(cm) {}
void finish(int r) {
assert(r == 0);
mdcache->rejoin_open_sessions_finish(client_map, sseqmap);
mds->finisher));
}
-struct C_MDC_TruncateLogged : public MDCacheContext {
+struct C_MDC_TruncateLogged : public MDCacheLogContext {
CInode *in;
MutationRef mut;
C_MDC_TruncateLogged(MDCache *m, CInode *i, MutationRef& mu) :
- MDCacheContext(m), in(i), mut(mu) {}
+ MDCacheLogContext(m), in(i), mut(mu) {}
void finish(int r) {
mdcache->truncate_inode_logged(in, mut);
}
// -------------------------------------------------------------------------------
// SNAPREALMS
-struct C_MDC_snaprealm_create_finish : public MDCacheContext {
+struct C_MDC_snaprealm_create_finish : public MDCacheLogContext {
MDRequestRef mdr;
MutationRef mut;
CInode *in;
C_MDC_snaprealm_create_finish(MDCache *c, MDRequestRef& m,
MutationRef& mu, CInode *i) :
- MDCacheContext(c), mdr(m), mut(mu), in(i) {}
+ MDCacheLogContext(c), mdr(m), mut(mu), in(i) {}
void finish(int r) {
mdcache->_snaprealm_create_finish(mdr, mut, in);
}
}
}
-class C_MDC_FragmentPrep : public MDSInternalContext {
- MDCache *mdcache;
+class C_MDC_FragmentPrep : public MDCacheLogContext {
MDRequestRef mdr;
public:
- C_MDC_FragmentPrep(MDCache *m, MDRequestRef& r) : MDSInternalContext(m->mds), mdcache(m), mdr(r) {}
+ C_MDC_FragmentPrep(MDCache *m, MDRequestRef& r) : MDCacheLogContext(m), mdr(r) {}
virtual void finish(int r) {
mdcache->_fragment_logged(mdr);
}
};
-class C_MDC_FragmentStore : public MDSInternalContext {
- MDCache *mdcache;
+class C_MDC_FragmentStore : public MDCacheContext {
MDRequestRef mdr;
public:
- C_MDC_FragmentStore(MDCache *m, MDRequestRef& r) : MDSInternalContext(m->mds), mdcache(m), mdr(r) {}
+ C_MDC_FragmentStore(MDCache *m, MDRequestRef& r) : MDCacheContext(m), mdr(r) {}
virtual void finish(int r) {
mdcache->_fragment_stored(mdr);
}
};
-class C_MDC_FragmentCommit : public MDSInternalContext {
- MDCache *mdcache;
+class C_MDC_FragmentCommit : public MDCacheLogContext {
dirfrag_t basedirfrag;
list<CDir*> resultfrags;
public:
C_MDC_FragmentCommit(MDCache *m, dirfrag_t df, list<CDir*>& l) :
- MDSInternalContext(m->mds), mdcache(m), basedirfrag(df), resultfrags(l) {}
+ MDCacheLogContext(m), basedirfrag(df), resultfrags(l) {}
virtual void finish(int r) {
mdcache->_fragment_committed(basedirfrag, resultfrags);
}
return;
}
-struct C_MDC_RepairDirfragStats : public MDSInternalContext {
+struct C_MDC_RepairDirfragStats : public MDCacheLogContext {
MDRequestRef mdr;
- C_MDC_RepairDirfragStats(MDSRank *_mds, MDRequestRef& m) :
- MDSInternalContext(_mds), mdr(m) {}
+ C_MDC_RepairDirfragStats(MDCache *c, MDRequestRef& m) :
+ MDCacheLogContext(c), mdr(m) {}
void finish(int r) {
mdr->apply();
- mds->server->respond_to_request(mdr, r);
+ get_mds()->server->respond_to_request(mdr, r);
}
};
le->metablob.add_dir_context(dir);
le->metablob.add_dir(dir, true);
- mds->mdlog->submit_entry(le, new C_MDC_RepairDirfragStats(mds, mdr));
+ mds->mdlog->submit_entry(le, new C_MDC_RepairDirfragStats(this, mdr));
}
void MDCache::repair_inode_stats(CInode *diri)
}
};
+class ServerLogContext : public MDSLogContextBase {
+protected:
+ Server *server;
+ MDSRank *get_mds()
+ {
+ return server->mds;
+ }
+
+ MDRequestRef mdr;
+ void pre_finish(int r) {
+ if (mdr)
+ mdr->mark_event("journal_committed: ");
+ }
+public:
+ explicit ServerLogContext(Server *s) : server(s) {
+ assert(server != NULL);
+ }
+ explicit ServerLogContext(Server *s, MDRequestRef& r) : server(s), mdr(r) {
+ assert(server != NULL);
+ }
+};
void Server::create_logger()
{
// ----------------------------------------------------------
// SESSION management
-class C_MDS_session_finish : public MDSInternalContext {
+class C_MDS_session_finish : public ServerLogContext {
Session *session;
uint64_t state_seq;
bool open;
version_t inotablev;
Context *fin;
public:
- C_MDS_session_finish(MDSRank *m, Session *se, uint64_t sseq, bool s, version_t mv, Context *fin_ = NULL) :
- MDSInternalContext(m), session(se), state_seq(sseq), open(s), cmapv(mv), inotablev(0), fin(fin_) { }
- C_MDS_session_finish(MDSRank *m, Session *se, uint64_t sseq, bool s, version_t mv, interval_set<inodeno_t>& i, version_t iv, Context *fin_ = NULL) :
- MDSInternalContext(m), session(se), state_seq(sseq), open(s), cmapv(mv), inos(i), inotablev(iv), fin(fin_) { }
+ C_MDS_session_finish(Server *srv, Session *se, uint64_t sseq, bool s, version_t mv, Context *fin_ = NULL) :
+ ServerLogContext(srv), session(se), state_seq(sseq), open(s), cmapv(mv), inotablev(0), fin(fin_) { }
+ C_MDS_session_finish(Server *srv, Session *se, uint64_t sseq, bool s, version_t mv, interval_set<inodeno_t>& i, version_t iv, Context *fin_ = NULL) :
+ ServerLogContext(srv), session(se), state_seq(sseq), open(s), cmapv(mv), inos(i), inotablev(iv), fin(fin_) { }
void finish(int r) {
assert(r == 0);
- mds->server->_session_logged(session, state_seq, open, cmapv, inos, inotablev);
+ server->_session_logged(session, state_seq, open, cmapv, inos, inotablev);
if (fin) {
fin->complete(r);
}
sseq = mds->sessionmap.set_state(session, Session::STATE_OPENING);
mds->sessionmap.touch_session(session);
mdlog->start_submit_entry(new ESession(m->get_source_inst(), true, pv, m->client_meta),
- new C_MDS_session_finish(mds, session, sseq, true, pv));
+ new C_MDS_session_finish(this, session, sseq, true, pv));
mdlog->flush();
break;
piv = 0;
mdlog->start_submit_entry(new ESession(session->info.inst, false, pv, both, piv),
- new C_MDS_session_finish(mds, session, sseq, false, pv, both, piv, on_safe));
+ new C_MDS_session_finish(this, session, sseq, false, pv, both, piv, on_safe));
mdlog->flush();
// clean up requests, too
/*******
* some generic stuff for finishing off requests
*/
-void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEvent *le, MDSInternalContextBase *fin)
+void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEvent *le, MDSLogContextBase *fin)
{
dout(10) << "journal_and_reply tracei " << in << " tracedn " << dn << dendl;
assert(!mdr->has_completed);
mdlog->flush();
}
-class C_MarkEvent : public MDSInternalContext
-{
- Context *true_finisher;
- MDRequestRef mdr;
- string event_str;
-public:
- C_MarkEvent(MDSRank *mds_, Context *f, MDRequestRef& _mdr,
- const char *evt)
- : MDSInternalContext(mds_), 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, MDSInternalContextBase *fin, MDRequestRef& mdr,
+void Server::submit_mdlog_entry(LogEvent *le, MDSLogContextBase *fin, MDRequestRef& mdr,
const char *event)
{
if (mdr) {
string event_str("submit entry: ");
event_str += event;
mdr->mark_event(event_str);
- mdlog->submit_entry(le, new C_MarkEvent(mds, fin, mdr, event));
- } else
- mdlog->submit_entry(le, fin);
+ }
+ mdlog->submit_entry(le, fin);
}
/*
respond_to_request(mdr, 0);
}
-class C_MDS_openc_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_openc_finish : public ServerLogContext {
CDentry *dn;
CInode *newi;
snapid_t follows;
public:
- C_MDS_openc_finish(MDSRank *m, MDRequestRef& r, CDentry *d, CInode *ni, snapid_t f) :
- MDSInternalContext(m), mdr(r), dn(d), newi(ni), follows(f) {}
+ C_MDS_openc_finish(Server *s, MDRequestRef& r, CDentry *d, CInode *ni, snapid_t f) :
+ ServerLogContext(s, r), dn(d), newi(ni), follows(f) {}
void finish(int r) {
assert(r == 0);
mdr->apply();
- mds->locker->share_inode_max_size(newi);
+ get_mds()->locker->share_inode_max_size(newi);
MDRequestRef null_ref;
- mds->mdcache->send_dentry_link(dn, null_ref);
+ get_mds()->mdcache->send_dentry_link(dn, null_ref);
- mds->balancer->hit_inode(mdr->get_mds_stamp(), newi, META_POP_IWR);
+ get_mds()->balancer->hit_inode(mdr->get_mds_stamp(), newi, META_POP_IWR);
- mds->server->respond_to_request(mdr, 0);
+ server->respond_to_request(mdr, 0);
assert(g_conf->mds_kill_openc_at != 1);
}
LogSegment *ls = mds->mdlog->get_current_segment();
ls->open_files.push_back(&in->item_open_file);
- C_MDS_openc_finish *fin = new C_MDS_openc_finish(mds, mdr, dn, in, follows);
+ C_MDS_openc_finish *fin = new C_MDS_openc_finish(this, mdr, dn, in, follows);
if (mdr->client_request->get_connection()->has_feature(CEPH_FEATURE_REPLY_CREATE_INODE)) {
dout(10) << "adding ino to reply to indicate inode was created" << dendl;
/*
* finisher for basic inode updates
*/
-class C_MDS_inode_update_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_inode_update_finish : public ServerLogContext {
CInode *in;
bool truncating_smaller, changed_ranges;
public:
- C_MDS_inode_update_finish(MDSRank *m, MDRequestRef& r, CInode *i,
+ C_MDS_inode_update_finish(Server *s, MDRequestRef& r, CInode *i,
bool sm=false, bool cr=false) :
- MDSInternalContext(m), mdr(r), in(i), truncating_smaller(sm), changed_ranges(cr) { }
+ ServerLogContext(s, r), in(i), truncating_smaller(sm), changed_ranges(cr) { }
void finish(int r) {
assert(r == 0);
// notify any clients
if (truncating_smaller && in->inode.is_truncating()) {
- mds->locker->issue_truncate(in);
- mds->mdcache->truncate_inode(in, mdr->ls);
+ get_mds()->locker->issue_truncate(in);
+ get_mds()->mdcache->truncate_inode(in, mdr->ls);
}
- mds->balancer->hit_inode(mdr->get_mds_stamp(), in, META_POP_IWR);
+ get_mds()->balancer->hit_inode(mdr->get_mds_stamp(), in, META_POP_IWR);
- mds->server->respond_to_request(mdr, 0);
+ server->respond_to_request(mdr, 0);
if (changed_ranges)
- mds->locker->share_inode_max_size(in);
+ get_mds()->locker->share_inode_max_size(in);
}
};
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur,
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur,
truncating_smaller, changed_ranges));
// flush immediately if there are readers/writers waiting
dn = mdr->dn[0].back();
}
- journal_and_reply(mdr, in, dn, le, new C_MDS_inode_update_finish(mds, mdr, in, old_size > 0,
+ journal_and_reply(mdr, in, dn, le, new C_MDS_inode_update_finish(this, mdr, in, old_size > 0,
changed_ranges));
// Although the `open` part can give an early reply, the truncation won't
// happen until our EUpdate is persistent, to give the client a prompt
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
}
void Server::handle_client_setdirlayout(MDRequestRef& mdr)
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
}
// XATTRS
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
return;
}
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
return;
}
respond_to_request(mdr, -ENODATA);
}
-class C_MDS_inode_xattr_update_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_inode_xattr_update_finish : public ServerLogContext {
CInode *in;
public:
- C_MDS_inode_xattr_update_finish(MDSRank *m, MDRequestRef& r, CInode *i) :
- MDSInternalContext(m), mdr(r), in(i) { }
+ C_MDS_inode_xattr_update_finish(Server *s, MDRequestRef& r, CInode *i) :
+ ServerLogContext(s, r), in(i) { }
void finish(int r) {
assert(r == 0);
mdr->apply();
- mds->balancer->hit_inode(mdr->get_mds_stamp(), in, META_POP_IWR);
+ get_mds()->balancer->hit_inode(mdr->get_mds_stamp(), in, META_POP_IWR);
- mds->server->respond_to_request(mdr, 0);
+ server->respond_to_request(mdr, 0);
}
};
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
}
void Server::handle_client_removexattr(MDRequestRef& mdr)
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
- journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
+ journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(this, mdr, cur));
}
// MKNOD
-class C_MDS_mknod_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_mknod_finish : public ServerLogContext {
CDentry *dn;
CInode *newi;
public:
- C_MDS_mknod_finish(MDSRank *m, MDRequestRef& r, CDentry *d, CInode *ni) :
- MDSInternalContext(m), mdr(r), dn(d), newi(ni) {}
+ C_MDS_mknod_finish(Server *s, MDRequestRef& r, CDentry *d, CInode *ni) :
+ ServerLogContext(s, r), dn(d), newi(ni) {}
void finish(int r) {
assert(r == 0);
mdr->apply();
MDRequestRef null_ref;
- mds->mdcache->send_dentry_link(dn, null_ref);
+ get_mds()->mdcache->send_dentry_link(dn, null_ref);
if (newi->inode.is_file())
- mds->locker->share_inode_max_size(newi);
+ get_mds()->locker->share_inode_max_size(newi);
// hit pop
- mds->balancer->hit_inode(mdr->get_mds_stamp(), newi, META_POP_IWR);
+ get_mds()->balancer->hit_inode(mdr->get_mds_stamp(), newi, META_POP_IWR);
// reply
- mds->server->respond_to_request(mdr, 0);
+ server->respond_to_request(mdr, 0);
}
};
PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, newi, true, true, true);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(this, mdr, dn, newi));
}
LogSegment *ls = mds->mdlog->get_current_segment();
ls->open_files.push_back(&newi->item_open_file);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(this, mdr, dn, newi));
}
mdcache->predirty_journal_parents(mdr, &le->metablob, newi, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, newi, true, true);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(this, mdr, dn, newi));
}
}
-class C_MDS_link_local_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_link_local_finish : public ServerLogContext {
CDentry *dn;
CInode *targeti;
version_t dnpv;
version_t tipv;
public:
- C_MDS_link_local_finish(MDSRank *m, MDRequestRef& r, CDentry *d, CInode *ti,
+ C_MDS_link_local_finish(Server *s, MDRequestRef& r, CDentry *d, CInode *ti,
version_t dnpv_, version_t tipv_) :
- MDSInternalContext(m), mdr(r), dn(d), targeti(ti),
+ ServerLogContext(s, r), dn(d), targeti(ti),
dnpv(dnpv_), tipv(tipv_) { }
void finish(int r) {
assert(r == 0);
- mds->server->_link_local_finish(mdr, dn, targeti, dnpv, tipv);
+ server->_link_local_finish(mdr, dn, targeti, dnpv, tipv);
}
};
// do this after predirty_*, to avoid funky extra dnl arg
dn->push_projected_linkage(targeti->ino(), targeti->d_type());
- journal_and_reply(mdr, targeti, dn, le, new C_MDS_link_local_finish(mds, mdr, dn, targeti, dnpv, tipv));
+ journal_and_reply(mdr, targeti, dn, le, new C_MDS_link_local_finish(this, mdr, dn, targeti, dnpv, tipv));
}
void Server::_link_local_finish(MDRequestRef& mdr, CDentry *dn, CInode *targeti,
// link / unlink remote
-class C_MDS_link_remote_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_link_remote_finish : public ServerLogContext {
bool inc;
CDentry *dn;
CInode *targeti;
version_t dpv;
public:
- C_MDS_link_remote_finish(MDSRank *m, MDRequestRef& r, bool i, CDentry *d, CInode *ti) :
- MDSInternalContext(m), mdr(r), inc(i), dn(d), targeti(ti),
+ C_MDS_link_remote_finish(Server *s, MDRequestRef& r, bool i, CDentry *d, CInode *ti) :
+ ServerLogContext(s, r), inc(i), dn(d), targeti(ti),
dpv(d->get_projected_version()) {}
void finish(int r) {
assert(r == 0);
- mds->server->_link_remote_finish(mdr, inc, dn, targeti, dpv);
+ server->_link_remote_finish(mdr, inc, dn, targeti, dpv);
}
};
le->metablob.add_null_dentry(dn, true);
}
- journal_and_reply(mdr, targeti, dn, le, new C_MDS_link_remote_finish(mds, mdr, inc, dn, targeti));
+ journal_and_reply(mdr, targeti, dn, le, new C_MDS_link_remote_finish(this, mdr, inc, dn, targeti));
}
void Server::_link_remote_finish(MDRequestRef& mdr, bool inc,
// remote linking/unlinking
-class C_MDS_SlaveLinkPrep : public ServerContext {
- MDRequestRef mdr;
+class C_MDS_SlaveLinkPrep : public ServerLogContext {
CInode *targeti;
public:
C_MDS_SlaveLinkPrep(Server *s, MDRequestRef& r, CInode *t) :
- ServerContext(s), mdr(r), targeti(t) { }
+ ServerLogContext(s, r), targeti(t) { }
void finish(int r) {
assert(r == 0);
server->_logged_slave_link(mdr, targeti);
}
-struct C_MDS_CommittedSlave : public ServerContext {
- MDRequestRef mdr;
- C_MDS_CommittedSlave(Server *s, MDRequestRef& m) : ServerContext(s), mdr(m) {}
+struct C_MDS_CommittedSlave : public ServerLogContext {
+ C_MDS_CommittedSlave(Server *s, MDRequestRef& m) : ServerLogContext(s, m) {}
void finish(int r) {
server->_committed_slave(mdr);
}
mdcache->request_finish(mdr);
}
-struct C_MDS_LoggedLinkRollback : public ServerContext {
+struct C_MDS_LoggedLinkRollback : public ServerLogContext {
MutationRef mut;
- MDRequestRef mdr;
- C_MDS_LoggedLinkRollback(Server *s, MutationRef& m, MDRequestRef& r) : ServerContext(s), mut(m), mdr(r) {}
+ C_MDS_LoggedLinkRollback(Server *s, MutationRef& m, MDRequestRef& r) : ServerLogContext(s, r), mut(m) {}
void finish(int r) {
server->_link_rollback_finish(mut, mdr);
}
_unlink_local(mdr, dn, straydn);
}
-class C_MDS_unlink_local_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_unlink_local_finish : public ServerLogContext {
CDentry *dn;
CDentry *straydn;
version_t dnpv; // deleted dentry
public:
- C_MDS_unlink_local_finish(MDSRank *m, MDRequestRef& r, CDentry *d, CDentry *sd) :
- MDSInternalContext(m), mdr(r), dn(d), straydn(sd),
+ C_MDS_unlink_local_finish(Server *s, MDRequestRef& r, CDentry *d, CDentry *sd) :
+ ServerLogContext(s, r), dn(d), straydn(sd),
dnpv(d->get_projected_version()) {}
void finish(int r) {
assert(r == 0);
- mds->server->_unlink_local_finish(mdr, dn, straydn, dnpv);
+ server->_unlink_local_finish(mdr, dn, straydn, dnpv);
}
};
mdcache->project_subtree_rename(in, dn->get_dir(), straydn->get_dir());
}
- journal_and_reply(mdr, 0, dn, le, new C_MDS_unlink_local_finish(mds, mdr, dn, straydn));
+ journal_and_reply(mdr, 0, dn, le, new C_MDS_unlink_local_finish(this, mdr, dn, straydn));
}
void Server::_unlink_local_finish(MDRequestRef& mdr,
return true;
}
-struct C_MDS_SlaveRmdirPrep : public ServerContext {
- MDRequestRef mdr;
+struct C_MDS_SlaveRmdirPrep : public ServerLogContext {
CDentry *dn, *straydn;
C_MDS_SlaveRmdirPrep(Server *s, MDRequestRef& r, CDentry *d, CDentry *st)
- : ServerContext(s), mdr(r), dn(d), straydn(st) {}
+ : ServerLogContext(s, r), dn(d), straydn(st) {}
void finish(int r) {
server->_logged_slave_rmdir(mdr, dn, straydn);
}
}
}
-struct C_MDS_LoggedRmdirRollback : public ServerContext {
- MDRequestRef mdr;
+struct C_MDS_LoggedRmdirRollback : public ServerLogContext {
metareqid_t reqid;
CDentry *dn;
CDentry *straydn;
C_MDS_LoggedRmdirRollback(Server *s, MDRequestRef& m, metareqid_t mr, CDentry *d, CDentry *st)
- : ServerContext(s), mdr(m), reqid(mr), dn(d), straydn(st) {}
+ : ServerLogContext(s, m), reqid(mr), dn(d), straydn(st) {}
void finish(int r) {
server->_rmdir_rollback_finish(mdr, reqid, dn, straydn);
}
// ======================================================
-class C_MDS_rename_finish : public MDSInternalContext {
- MDRequestRef mdr;
+class C_MDS_rename_finish : public ServerLogContext {
CDentry *srcdn;
CDentry *destdn;
CDentry *straydn;
public:
- C_MDS_rename_finish(MDSRank *m, MDRequestRef& r,
+ C_MDS_rename_finish(Server *s, MDRequestRef& r,
CDentry *sdn, CDentry *ddn, CDentry *stdn) :
- MDSInternalContext(m), mdr(r),
+ ServerLogContext(s, r),
srcdn(sdn), destdn(ddn), straydn(stdn) { }
void finish(int r) {
assert(r == 0);
- mds->server->_rename_finish(mdr, srcdn, destdn, straydn);
+ server->_rename_finish(mdr, srcdn, destdn, straydn);
}
};
le->cmapv = mds->sessionmap.get_projected();
// -- commit locally --
- C_MDS_rename_finish *fin = new C_MDS_rename_finish(mds, mdr, srcdn, destdn, straydn);
+ C_MDS_rename_finish *fin = new C_MDS_rename_finish(this, mdr, srcdn, destdn, straydn);
journal_and_reply(mdr, srci, destdn, le, fin);
}
// ------------
// SLAVE
-class C_MDS_SlaveRenamePrep : public ServerContext {
- MDRequestRef mdr;
+class C_MDS_SlaveRenamePrep : public ServerLogContext {
CDentry *srcdn, *destdn, *straydn;
public:
C_MDS_SlaveRenamePrep(Server *s, MDRequestRef& m, CDentry *sr, CDentry *de, CDentry *st) :
- ServerContext(s), mdr(m), srcdn(sr), destdn(de), straydn(st) {}
+ ServerLogContext(s, m), srcdn(sr), destdn(de), straydn(st) {}
void finish(int r) {
server->_logged_slave_rename(mdr, srcdn, destdn, straydn);
}
mut->add_updated_lock(&dir->get_inode()->nestlock);
}
-struct C_MDS_LoggedRenameRollback : public ServerContext {
+struct C_MDS_LoggedRenameRollback : public ServerLogContext {
MutationRef mut;
- MDRequestRef mdr;
CDentry *srcdn;
version_t srcdnpv;
CDentry *destdn;
C_MDS_LoggedRenameRollback(Server *s, MutationRef& m, MDRequestRef& r,
CDentry *sd, version_t pv, CDentry *dd,
CDentry *st, bool f) :
- ServerContext(s), mut(m), mdr(r), srcdn(sd), srcdnpv(pv), destdn(dd),
+ ServerLogContext(s, r), mut(m), srcdn(sd), srcdnpv(pv), destdn(dd),
straydn(st), finish_mdr(f) {}
void finish(int r) {
server->_rename_rollback_finish(mut, mdr, srcdn, srcdnpv,
assert(!le->commit.empty());
if (mdr)
mdr->more()->slave_update_journaled = false;
- MDSInternalContextBase *fin = new C_MDS_LoggedRenameRollback(this, mut, mdr, srcdn, srcdnpv,
+ MDSLogContextBase *fin = new C_MDS_LoggedRenameRollback(this, mut, mdr, srcdn, srcdnpv,
destdn, straydn, finish_mdr);
submit_mdlog_entry(le, fin, mdr, __func__);
mdlog->flush();
// MKSNAP
-struct C_MDS_mksnap_finish : public MDSInternalContext {
- MDRequestRef mdr;
+struct C_MDS_mksnap_finish : public ServerLogContext {
CInode *diri;
SnapInfo info;
- C_MDS_mksnap_finish(MDSRank *m, MDRequestRef& r, CInode *di, SnapInfo &i) :
- MDSInternalContext(m), mdr(r), diri(di), info(i) {}
+ C_MDS_mksnap_finish(Server *s, MDRequestRef& r, CInode *di, SnapInfo &i) :
+ ServerLogContext(s, r), diri(di), info(i) {}
void finish(int r) {
- mds->server->_mksnap_finish(mdr, diri, info);
+ server->_mksnap_finish(mdr, diri, info);
}
};
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
// journal the snaprealm changes
- submit_mdlog_entry(le, new C_MDS_mksnap_finish(mds, mdr, diri, info),
+ submit_mdlog_entry(le, new C_MDS_mksnap_finish(this, mdr, diri, info),
mdr, __func__);
mdlog->flush();
}
// RMSNAP
-struct C_MDS_rmsnap_finish : public MDSInternalContext {
- MDRequestRef mdr;
+struct C_MDS_rmsnap_finish : public ServerLogContext {
CInode *diri;
snapid_t snapid;
- C_MDS_rmsnap_finish(MDSRank *m, MDRequestRef& r, CInode *di, snapid_t sn) :
- MDSInternalContext(m), mdr(r), diri(di), snapid(sn) {}
+ C_MDS_rmsnap_finish(Server *s, MDRequestRef& r, CInode *di, snapid_t sn) :
+ ServerLogContext(s, r), diri(di), snapid(sn) {}
void finish(int r) {
- mds->server->_rmsnap_finish(mdr, diri, snapid);
+ server->_rmsnap_finish(mdr, diri, snapid);
}
};
mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
- submit_mdlog_entry(le, new C_MDS_rmsnap_finish(mds, mdr, diri, snapid),
+ submit_mdlog_entry(le, new C_MDS_rmsnap_finish(this, mdr, diri, snapid),
mdr, __func__);
mdlog->flush();
}
diri->purge_stale_snap_data(diri->snaprealm->get_snaps());
}
-struct C_MDS_renamesnap_finish : public MDSInternalContext {
- MDRequestRef mdr;
+struct C_MDS_renamesnap_finish : public ServerLogContext {
CInode *diri;
snapid_t snapid;
- C_MDS_renamesnap_finish(MDSRank *m, MDRequestRef& r, CInode *di, snapid_t sn) :
- MDSInternalContext(m), mdr(r), diri(di), snapid(sn) {}
+ C_MDS_renamesnap_finish(Server *s, MDRequestRef& r, CInode *di, snapid_t sn) :
+ ServerLogContext(s, r), diri(di), snapid(sn) {}
void finish(int r) {
- mds->server->_renamesnap_finish(mdr, diri, snapid);
+ server->_renamesnap_finish(mdr, diri, snapid);
}
};
mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
// journal the snaprealm changes
- submit_mdlog_entry(le, new C_MDS_renamesnap_finish(mds, mdr, diri, snapid),
+ submit_mdlog_entry(le, new C_MDS_renamesnap_finish(this, mdr, diri, snapid),
mdr, __func__);
mdlog->flush();
}