bufferlist encoded;
version_t get_epoch() const { return epoch; }
- bufferlist& get_encoded() { return encoded; }
+ const FSMap & get_fsmap() {return fsmap;}
MFSMap() :
Message(CEPH_MSG_FS_MAP), epoch(0) {}
- MFSMap(const uuid_d &f, FSMap *fsmap) :
- Message(CEPH_MSG_FS_MAP), epoch(fsmap->get_epoch())
+ MFSMap(const uuid_d &f, const FSMap &fsmap_) :
+ Message(CEPH_MSG_FS_MAP), epoch(fsmap_.get_epoch())
{
- fsmap->encode(encoded, -1);
+ fsmap = fsmap_;
}
private:
+ FSMap fsmap;
+
~MFSMap() {}
public:
void decode_payload() {
bufferlist::iterator p = payload.begin();
::decode(epoch, p);
- ::decode(encoded, p);
+ ::decode(fsmap, p);
}
void encode_payload(uint64_t features) {
::encode(epoch, payload);
- ::encode(encoded, payload);
+ ::encode(fsmap, payload, features);
}
};
if (sub->type == "fsmap") {
if (sub->next <= fsmap.get_epoch()) {
- sub->session->con->send_message(new MFSMap(mon->monmap->fsid, &fsmap));
+ sub->session->con->send_message(new MFSMap(mon->monmap->fsid, fsmap));
if (sub->onetime) {
mon->session_map.remove_sub(sub);
} else {
Dumper() : ino(-1)
{}
- void handle_mds_map(MFSMap* m);
-
int init(mds_role_t role_);
int recover_journal(Journaler *journaler);
int dump(const char *dumpfile);
void MDSUtility::handle_mds_map(MFSMap* m)
{
- fsmap->decode(m->get_encoded());
+ *fsmap = m->get_fsmap();
if (waiting_for_mds_map) {
waiting_for_mds_map->complete(0);
waiting_for_mds_map = NULL;