diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 32a2321c96c67..26ea7acd2f59a 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -3692,7 +3692,16 @@ void Monitor::handle_command(MonOpRequestRef op) rs = ""; r = 0; } else if (prefix == "report") { - + // some of the report data is only known by leader, e.g. osdmap_clean_epochs + if (!is_leader() && !is_peon()) { + dout(10) << " waiting for quorum" << dendl; + waitfor_quorum.push_back(new C_RetryMessage(this, op)); + return; + } + if (!is_leader()) { + forward_request_leader(op); + return; + } // this must be formatted, in its current form if (!f) f.reset(Formatter::create("json-pretty"));