struct ceph_mdsmap *newmap, *oldmap;
int from = le32_to_cpu(msg->hdr.src.name.num);
int newstate;
+ struct ceph_fsid fsid;
- ceph_decode_need(&p, end, 2*sizeof(__u32), bad);
+ ceph_decode_need(&p, end, sizeof(fsid)+2*sizeof(__u32), bad);
+ ceph_decode_64(&p, fsid.major);
+ ceph_decode_64(&p, fsid.minor);
+ if (!ceph_fsid_equal(&fsid, &mdsc->client->monc.monmap->fsid)) {
+ derr(0, "got mdsmap with wrong fsid\n");
+ return;
+ }
ceph_decode_32(&p, epoch);
ceph_decode_32(&p, maplen);
dout(2, "handle_map epoch %u len %d\n", epoch, (int)maplen);
{
// send mdsmap first?
if (peer_mdsmap_epoch[mds] < mdsmap->get_epoch()) {
- messenger->send_message(new MMDSMap(mdsmap),
+ messenger->send_message(new MMDSMap(monmap->fsid, mdsmap),
mdsmap->get_inst(mds));
peer_mdsmap_epoch[mds] = mdsmap->get_epoch();
}
for (set<Session*>::const_iterator p = clients.begin();
p != clients.end();
++p)
- messenger->send_message(new MMDSMap(mdsmap), (*p)->inst);
+ messenger->send_message(new MMDSMap(monmap->fsid, mdsmap), (*p)->inst);
last_client_mdsmap_bcast = mdsmap->get_epoch();
}
return e;
}
*/
-
+
+ ceph_fsid fsid;
epoch_t epoch;
bufferlist encoded;
MMDSMap() :
Message(CEPH_MSG_MDS_MAP) {}
- MMDSMap(MDSMap *mm) :
- Message(CEPH_MSG_MDS_MAP) {
+ MMDSMap(ceph_fsid &f, MDSMap *mm) :
+ Message(CEPH_MSG_MDS_MAP),
+ fsid(f) {
epoch = mm->get_epoch();
mm->encode(encoded);
}
// marshalling
void decode_payload() {
int off = 0;
+ ::_decode(fsid, payload, off);
::_decode(epoch, payload, off);
::_decode(encoded, payload, off);
}
void encode_payload() {
+ ::_encode(fsid, payload);
::_encode(epoch, payload);
::_encode(encoded, payload);
}
void MDSMonitor::send_full(entity_inst_t dest)
{
dout(11) << "send_full to " << dest << dendl;
- mon->messenger->send_message(new MMDSMap(&mdsmap), dest);
+ mon->messenger->send_message(new MMDSMap(mon->monmap->fsid, &mdsmap), dest);
}
void MDSMonitor::send_to_waiting()