// send ExportDirDiscover (ask target)
filepath path;
dir->inode->make_path(path);
- mds->send_message_mds(new MExportDirDiscover(path, dir->dirfrag()), dest);
+ mds->send_message_mds(new MExportDirDiscover(mds->get_nodeid(), path, dir->dirfrag()), dest);
assert(g_conf.mds_kill_export_at != 2);
// start the freeze, but hold it up with an auth_pin.
void Migrator::handle_export_discover(MExportDirDiscover *m)
{
- assert(m->get_source().num() != mds->get_nodeid());
+ int from = m->get_source_mds();
+ assert(from != mds->get_nodeid());
dout(7) << "handle_export_discover on " << m->get_path() << dendl;
if (!m->started) {
m->started = true;
import_state[df] = IMPORT_DISCOVERING;
- import_peer[df] = m->get_source().num();
+ import_peer[df] = from;
}
// am i retrying after ancient path_traverse results?
#include "include/types.h"
class MExportDirDiscover : public Message {
+ int32_t from;
dirfrag_t dirfrag;
filepath path;
public:
+ int get_source_mds() { return from; }
inodeno_t get_ino() { return dirfrag.ino; }
dirfrag_t get_dirfrag() { return dirfrag; }
filepath& get_path() { return path; }
MExportDirDiscover() :
Message(MSG_MDS_EXPORTDIRDISCOVER),
started(false) { }
- MExportDirDiscover(filepath& p, dirfrag_t df) :
+ MExportDirDiscover(int f, filepath& p, dirfrag_t df) :
Message(MSG_MDS_EXPORTDIRDISCOVER),
+ from(f),
dirfrag(df),
path(p),
started(false)
virtual void decode_payload() {
bufferlist::iterator p = payload.begin();
+ ::decode(from, p);
::decode(dirfrag, p);
::decode(path, p);
}
virtual void encode_payload() {
+ ::encode(from, payload);
::encode(dirfrag, payload);
::encode(path, payload);
}