From 5b1866575904ce6d368016c50f148fc565fa2fe1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 17 May 2012 11:07:45 -0700 Subject: [PATCH] mon: pass has_ever_joined in probe messages This will allow monitors to behave appropriately with that important info.. Signed-off-by: Sage Weil --- src/messages/MMonProbe.h | 19 ++++++++++++++++--- src/mon/Monitor.cc | 12 +++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/messages/MMonProbe.h b/src/messages/MMonProbe.h index 62c1a1655e721..72144ab0f1853 100644 --- a/src/messages/MMonProbe.h +++ b/src/messages/MMonProbe.h @@ -21,6 +21,9 @@ class MMonProbe : public Message { public: + static const int HEAD_VERSION = 2; + static const int COMPAT_VERSION = 1; + enum { OP_PROBE = 1, OP_REPLY = 2, @@ -46,15 +49,18 @@ public: set quorum; bufferlist monmap_bl; map paxos_versions; + bool has_ever_joined; string machine_name; map > paxos_values; bufferlist latest_value; version_t latest_version, newest_version, oldest_version; - MMonProbe() : Message(MSG_MON_PROBE) {} - MMonProbe(const uuid_d& f, int o, const string& n) - : Message(MSG_MON_PROBE), fsid(f), op(o), name(n), + MMonProbe() + : Message(MSG_MON_PROBE, HEAD_VERSION, COMPAT_VERSION) {} + MMonProbe(const uuid_d& f, int o, const string& n, bool hej) + : Message(MSG_MON_PROBE, HEAD_VERSION, COMPAT_VERSION), + fsid(f), op(o), name(n), has_ever_joined(hej), latest_version(0), newest_version(0), oldest_version(0) {} private: ~MMonProbe() {} @@ -69,6 +75,8 @@ public: out << " versions " << paxos_versions; if (machine_name.length()) out << " machine_name " << machine_name << " " << oldest_version << "-" << newest_version; + if (!has_ever_joined) + out << " new"; out << ")"; } @@ -85,6 +93,7 @@ public: ::encode(paxos_values, payload); ::encode(latest_value, payload); ::encode(latest_version, payload); + ::encode(has_ever_joined, payload); } void decode_payload() { bufferlist::iterator p = payload.begin(); @@ -100,6 +109,10 @@ public: ::decode(paxos_values, p); ::decode(latest_value, p); ::decode(latest_version, p); + if (header.version >= 2) + ::decode(has_ever_joined, p); + else + has_ever_joined = false; } }; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index b723d2ea56ec1..3172f5cc8296c 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -281,6 +281,7 @@ int Monitor::init() // have we ever joined a quorum? has_ever_joined = store->exists_bl_ss("joined"); + dout(10) << "has_ever_joined = " << (int)has_ever_joined << dendl; // init paxos for (int i = 0; i < PAXOS_NUM; ++i) { @@ -458,7 +459,8 @@ void Monitor::bootstrap() dout(10) << "probing other monitors" << dendl; for (unsigned i = 0; i < monmap->size(); i++) { if ((int)i != rank) - messenger->send_message(new MMonProbe(monmap->fsid, MMonProbe::OP_PROBE, name), monmap->get_inst(i)); + messenger->send_message(new MMonProbe(monmap->fsid, MMonProbe::OP_PROBE, name, has_ever_joined), + monmap->get_inst(i)); } } @@ -547,7 +549,7 @@ void Monitor::handle_probe(MMonProbe *m) void Monitor::handle_probe_probe(MMonProbe *m) { dout(10) << "handle_probe_probe " << m->get_source_inst() << *m << dendl; - MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_REPLY, name); + MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_REPLY, name, has_ever_joined); r->name = name; r->quorum = quorum; monmap->encode(r->monmap_bl, m->get_connection()->get_features()); @@ -686,7 +688,7 @@ void Monitor::slurp() if (!pax->is_slurping()) { pax->start_slurping(); } - MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP, name); + MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP, name, has_ever_joined); m->machine_name = p->first; m->oldest_version = pax->get_first_committed(); m->newest_version = pax->get_version(); @@ -700,7 +702,7 @@ void Monitor::slurp() if (!pax->is_slurping()) { pax->start_slurping(); } - MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP_LATEST, name); + MMonProbe *m = new MMonProbe(monmap->fsid, MMonProbe::OP_SLURP_LATEST, name, has_ever_joined); m->machine_name = p->first; m->oldest_version = pax->get_first_committed(); m->newest_version = pax->get_version(); @@ -723,7 +725,7 @@ void Monitor::slurp() MMonProbe *Monitor::fill_probe_data(MMonProbe *m, Paxos *pax) { - MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_DATA, name); + MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_DATA, name, has_ever_joined); r->machine_name = m->machine_name; r->oldest_version = pax->get_first_committed(); r->newest_version = pax->get_version(); -- 2.39.5