From: Yan, Zheng Date: Tue, 9 May 2017 09:14:34 +0000 (+0800) Subject: mds: add source/dest information to EImportStart/EExport X-Git-Tag: v12.1.0~10^2~28^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ab44acef6b3db416021c1fe69a72f10bae00e368;p=ceph.git mds: add source/dest information to EImportStart/EExport Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/Migrator.cc b/src/mds/Migrator.cc index f15e7d03c3de..bc20ad679681 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -1691,7 +1691,7 @@ void Migrator::handle_export_ack(MExportDirAck *m) // log completion. // include export bounds, to ensure they're in the journal. - EExport *le = new EExport(mds->mdlog, dir); + EExport *le = new EExport(mds->mdlog, dir, it->second.peer);; mds->mdlog->start_entry(le); le->metablob.add_dir_context(dir, EMetaBlob::TO_ROOT); @@ -2160,6 +2160,7 @@ void Migrator::handle_export_prep(MExportDirPrep *m) if (!m->did_assim()) { assert(it != import_state.end()); assert(it->second.state == IMPORT_DISCOVERED); + assert(it->second.peer == oldauth); diri = cache->get_inode(m->get_dirfrag().ino); assert(diri); bufferlist::iterator p = m->basedir.begin(); @@ -2174,6 +2175,7 @@ void Migrator::handle_export_prep(MExportDirPrep *m) return; } assert(it->second.state == IMPORT_PREPPING); + assert(it->second.peer == oldauth); dir = cache->get_dirfrag(m->get_dirfrag()); assert(dir); @@ -2366,27 +2368,29 @@ void Migrator::handle_export_dir(MExportDir *m) assert (g_conf->mds_kill_import_at != 5); CDir *dir = cache->get_dirfrag(m->dirfrag); assert(dir); + + mds_rank_t oldauth = mds_rank_t(m->get_source().num()); + dout(7) << "handle_export_dir importing " << *dir << " from " << oldauth << dendl; + + assert(!dir->is_auth()); map::iterator it = import_state.find(m->dirfrag); assert(it != import_state.end()); assert(it->second.state == IMPORT_PREPPED); assert(it->second.tid == m->get_tid()); + assert(it->second.peer == oldauth); utime_t now = ceph_clock_now(); - mds_rank_t oldauth = mds_rank_t(m->get_source().num()); - dout(7) << "handle_export_dir importing " << *dir << " from " << oldauth << dendl; - assert(dir->is_auth() == false); if (!dir->get_inode()->dirfragtree.is_leaf(dir->get_frag())) dir->get_inode()->dirfragtree.force_to_leaf(g_ceph_context, dir->get_frag()); cache->show_subtrees(); - C_MDS_ImportDirLoggedStart *onlogged = new C_MDS_ImportDirLoggedStart( - this, dir, mds_rank_t(m->get_source().num())); + C_MDS_ImportDirLoggedStart *onlogged = new C_MDS_ImportDirLoggedStart(this, dir, oldauth); // start the journal entry - EImportStart *le = new EImportStart(mds->mdlog, dir->dirfrag(), m->bounds); + EImportStart *le = new EImportStart(mds->mdlog, dir->dirfrag(), m->bounds, oldauth); mds->mdlog->start_entry(le); le->metablob.add_dir_context(dir); diff --git a/src/mds/events/EExport.h b/src/mds/events/EExport.h index 6021240129e1..9c53c447a909 100644 --- a/src/mds/events/EExport.h +++ b/src/mds/events/EExport.h @@ -29,17 +29,19 @@ public: protected: dirfrag_t base; set bounds; + mds_rank_t target; public: - EExport() : LogEvent(EVENT_EXPORT) { } - EExport(MDLog *mdlog, CDir *dir) : + EExport() : + LogEvent(EVENT_EXPORT), target(MDS_RANK_NONE) { } + EExport(MDLog *mdlog, CDir *dir, mds_rank_t t) : LogEvent(EVENT_EXPORT), metablob(mdlog), - base(dir->dirfrag()) { } + base(dir->dirfrag()), target(t) { } set &get_bounds() { return bounds; } void print(ostream& out) const override { - out << "EExport " << base << " " << metablob; + out << "EExport " << base << " to mds." << target << " " << metablob; } EMetaBlob *get_metablob() override { return &metablob; } diff --git a/src/mds/events/EImportStart.h b/src/mds/events/EImportStart.h index 36f07b4510f9..9d446b629e18 100644 --- a/src/mds/events/EImportStart.h +++ b/src/mds/events/EImportStart.h @@ -28,21 +28,21 @@ class EImportStart : public LogEvent { protected: dirfrag_t base; vector bounds; + mds_rank_t from; - public: +public: EMetaBlob metablob; bufferlist client_map; // encoded map<__u32,entity_inst_t> version_t cmapv; - EImportStart(MDLog *log, - dirfrag_t di, - vector& b) : LogEvent(EVENT_IMPORTSTART), - base(di), bounds(b), - metablob(log) { } - EImportStart() : LogEvent(EVENT_IMPORTSTART) { } + EImportStart(MDLog *log, dirfrag_t di, vector& b, mds_rank_t f) : + LogEvent(EVENT_IMPORTSTART), + base(di), bounds(b), from(f), metablob(log) { } + EImportStart() : + LogEvent(EVENT_IMPORTSTART), from(MDS_RANK_NONE) { } void print(ostream& out) const override { - out << "EImportStart " << base << " " << metablob; + out << "EImportStart " << base << " from mds." << from << " " << metablob; } EMetaBlob *get_metablob() override { return &metablob; } diff --git a/src/mds/journal.cc b/src/mds/journal.cc index dfb4b03ffa87..9af81f035d69 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -2872,11 +2872,12 @@ void EExport::replay(MDSRank *mds) void EExport::encode(bufferlist& bl, uint64_t features) const { - ENCODE_START(3, 3, bl); + ENCODE_START(4, 3, bl); ::encode(stamp, bl); ::encode(metablob, bl, features); ::encode(base, bl); ::encode(bounds, bl); + ::encode(target, bl); ENCODE_FINISH(bl); } @@ -2888,6 +2889,8 @@ void EExport::decode(bufferlist::iterator &bl) ::decode(metablob, bl); ::decode(base, bl); ::decode(bounds, bl); + if (struct_v >= 4) + ::decode(target, bl); DECODE_FINISH(bl); } @@ -2966,13 +2969,14 @@ void EImportStart::replay(MDSRank *mds) } void EImportStart::encode(bufferlist &bl, uint64_t features) const { - ENCODE_START(3, 3, bl); + ENCODE_START(4, 3, bl); ::encode(stamp, bl); ::encode(base, bl); ::encode(metablob, bl, features); ::encode(bounds, bl); ::encode(cmapv, bl); ::encode(client_map, bl); + ::encode(from, bl); ENCODE_FINISH(bl); } @@ -2985,6 +2989,8 @@ void EImportStart::decode(bufferlist::iterator &bl) { ::decode(bounds, bl); ::decode(cmapv, bl); ::decode(client_map, bl); + if (struct_v >= 4) + ::decode(from, bl); DECODE_FINISH(bl); }