class MMonProbe final : public Message {
public:
- static constexpr int HEAD_VERSION = 7;
+ static constexpr int HEAD_VERSION = 8;
static constexpr int COMPAT_VERSION = 5;
enum {
int32_t op = 0;
std::string name;
std::set<int32_t> quorum;
+ int leader = -1;
ceph::buffer::list monmap_bl;
version_t paxos_first_version = 0;
version_t paxos_last_version = 0;
out << "mon_probe(" << get_opname(op) << " " << fsid << " name " << name;
if (quorum.size())
out << " quorum " << quorum;
+ out << " leader " << leader;
if (op == OP_REPLY) {
out << " paxos("
<< " fc " << paxos_first_version
encode(paxos_last_version, payload);
encode(required_features, payload);
encode(mon_release, payload);
+ encode(leader, payload);
}
void decode_payload() override {
using ceph::decode;
decode(mon_release, p);
else
mon_release = ceph_release_t::unknown;
+ if (header.version >= 8) {
+ decode(leader, p);
+ } else if (quorum.size()) {
+ leader = *quorum.begin();
+ }
}
private:
template<class T, typename... Args>
ceph_release());
r->name = name;
r->quorum = quorum;
+ r->leader = leader;
monmap->encode(r->monmap_bl, m->get_connection()->get_features());
r->paxos_first_version = paxos->get_first_committed();
r->paxos_last_version = paxos->get_version();
send_mon_message(new MMonJoin(monmap->fsid, name,
messenger->get_myaddrs(), crush_loc,
need_set_crush_loc),
- *m->quorum.begin());
+ m->leader);
}
} else {
if (monmap->contains(m->name)) {
<< map_crush_loc <<" -> " << name << "/" << crush_loc << dendl;
send_mon_message(new MMonJoin(monmap->fsid, name, messenger->get_myaddrs(),
crush_loc, need_set_crush_loc),
- *quorum.begin());
+ leader);
return;
}
do_stretch_mode_election_work();