class MMonMgrReport final : public PaxosServiceMessage {
private:
- static constexpr int HEAD_VERSION = 2;
+ static constexpr int HEAD_VERSION = 3;
static constexpr int COMPAT_VERSION = 1;
public:
health_check_map_t health_checks;
ceph::buffer::list service_map_bl; // encoded ServiceMap
std::map<std::string,ProgressEvent> progress_events;
+ uint64_t gid = 0;
MMonMgrReport()
: PaxosServiceMessage{MSG_MON_MGR_REPORT, 0, HEAD_VERSION, COMPAT_VERSION}
std::string_view get_type_name() const override { return "monmgrreport"; }
void print(std::ostream& out) const override {
- out << get_type_name() << "(" << health_checks.checks.size() << " checks, "
+ out << get_type_name() << "(gid " << gid
+ << ", " << health_checks.checks.size() << " checks, "
<< progress_events.size() << " progress events)";
}
encode(health_checks, payload);
encode(service_map_bl, payload);
encode(progress_events, payload);
+ encode(gid, payload);
if (!HAVE_FEATURE(features, SERVER_NAUTILUS) ||
!HAVE_FEATURE(features, SERVER_MIMIC)) {
if (header.version >= 2) {
decode(progress_events, p);
}
+ if (header.version >= 3) {
+ decode(gid, p);
+ }
}
private:
template<class T, typename... Args>
#include "MgrStatMonitor.h"
#include "mon/OSDMonitor.h"
+#include "mon/MgrMonitor.h"
#include "mon/PGMap.h"
#include "messages/MGetPoolStats.h"
#include "messages/MGetPoolStatsReply.h"
bool MgrStatMonitor::preprocess_report(MonOpRequestRef op)
{
+ auto m = op->get_req<MMonMgrReport>();
mon.no_reply(op);
+ if (m->gid &&
+ m->gid != mon.mgrmon()->get_map().get_active_gid()) {
+ dout(10) << "ignoring report from non-active mgr " << m->gid
+ << dendl;
+ return true;
+ }
return false;
}