}
}
+ ceph_fsid_t fsid;
int32_t op;
epoch_t epoch;
bufferlist monmap_bl;
MMonElection() : Message(MSG_MON_ELECTION) {}
MMonElection(int o, epoch_t e, MonMap *m) :
Message(MSG_MON_ELECTION),
- op(o), epoch(e) {
+ fsid(m->fsid), op(o), epoch(e) {
m->encode(monmap_bl);
}
private:
public:
const char *get_type_name() { return "election"; }
void print(ostream& out) {
- out << "election(" << get_opname(op) << " " << epoch << ")";
+ out << "election(" << fsid << " " << get_opname(op) << " " << epoch << ")";
}
void encode_payload(CephContext *cct) {
+ header.version = 2;
+ ::encode(fsid, payload);
::encode(op, payload);
::encode(epoch, payload);
::encode(monmap_bl, payload);
}
void decode_payload(CephContext *cct) {
bufferlist::iterator p = payload.begin();
+ if (header.version >= 2)
+ ::decode(fsid, p);
+ else
+ memset(&fsid, 0, sizeof(fsid));
::decode(op, p);
::decode(epoch, p);
::decode(monmap_bl, p);
}
}
+ ceph_fsid_t fsid;
int32_t op;
string name;
set<int32_t> quorum;
version_t latest_version, newest_version, oldest_version;
MMonProbe() : Message(MSG_MON_PROBE) {}
- MMonProbe(int o, const string& n)
- : Message(MSG_MON_PROBE), op(o), name(n),
+ MMonProbe(const ceph_fsid_t& f, int o, const string& n)
+ : Message(MSG_MON_PROBE), fsid(f), op(o), name(n),
latest_version(0), newest_version(0), oldest_version(0) {}
private:
~MMonProbe() {}
public:
const char *get_type_name() { return "mon_probe"; }
void print(ostream& out) {
- out << "mon_probe(" << get_opname(op) << " name " << name;
+ out << "mon_probe(" << get_opname(op) << " " << fsid << " name " << name;
if (quorum.size())
out << " quorum " << quorum;
if (paxos_versions.size())
}
void encode_payload(CephContext *cct) {
+ ::encode(fsid, payload);
::encode(op, payload);
::encode(name, payload);
::encode(quorum, payload);
}
void decode_payload(CephContext *cct) {
bufferlist::iterator p = payload.begin();
+ ::decode(fsid, p);
::decode(op, p);
::decode(name, p);
::decode(quorum, p);
dout(10) << "probing other monitors" << dendl;
for (unsigned i = 0; i < monmap->size(); i++) {
if ((int)i != rank)
- messenger->send_message(new MMonProbe(MMonProbe::OP_PROBE, name), monmap->get_inst(i));
+ messenger->send_message(new MMonProbe(monmap->fsid, MMonProbe::OP_PROBE, name), monmap->get_inst(i));
}
}
void Monitor::handle_probe(MMonProbe *m)
{
dout(10) << "handle_probe " << *m << dendl;
+
+ if (ceph_fsid_compare(&m->fsid, &monmap->fsid)) {
+ dout(0) << "handle_probe ignoring fsid " << m->fsid << " != " << monmap->fsid << dendl;
+ m->put();
+ return;
+ }
+
switch (m->op) {
case MMonProbe::OP_PROBE:
handle_probe_probe(m);
void Monitor::handle_probe_probe(MMonProbe *m)
{
dout(10) << "handle_probe_probe " << m->get_source_inst() << *m << dendl;
- MMonProbe *r = new MMonProbe(MMonProbe::OP_REPLY, name);
+ MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_REPLY, name);
r->name = name;
r->quorum = quorum;
monmap->encode(r->monmap_bl);
}
dout(10) << " " << p->first << " v " << p->second << " vs my " << pax->get_version() << dendl;
if (p->second > pax->get_version()) {
- MMonProbe *m = new MMonProbe(MMonProbe::OP_SLURP, name);
+ MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP, name);
m->machine_name = p->first;
m->oldest_version = pax->get_first_committed();
m->newest_version = pax->get_version();
// latest?
if (pax->get_first_committed() > 1 && // don't need it!
pax->get_latest_version() < pax->get_first_committed()) {
- MMonProbe *m = new MMonProbe(MMonProbe::OP_SLURP_LATEST, name);
+ MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP_LATEST, name);
m->machine_name = p->first;
m->oldest_version = pax->get_first_committed();
m->newest_version = pax->get_version();
Paxos *pax = get_paxos_by_name(m->machine_name);
assert(pax);
- MMonProbe *r = new MMonProbe(MMonProbe::OP_DATA, name);
+ MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_DATA, name);
r->machine_name = m->machine_name;
r->oldest_version = pax->get_first_committed();
r->newest_version = pax->get_version();
Paxos *pax = get_paxos_by_name(m->machine_name);
assert(pax);
- MMonProbe *r = new MMonProbe(MMonProbe::OP_DATA, name);
+ MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_DATA, name);
r->machine_name = m->machine_name;
r->oldest_version = pax->get_first_committed();
r->newest_version = pax->get_version();