#include "messages/MOSDPGInfo.h"
#include "messages/MOSDPGLog.h"
#include "messages/MOSDPGNotify.h"
+#include "messages/MOSDPGQuery.h"
#include "messages/MPGStats.h"
#include "crimson/mon/MonClient.h"
-
#include "crimson/net/Connection.h"
#include "crimson/net/Messenger.h"
#include "crimson/os/cyan_collection.h"
return handle_pg_notify(conn, boost::static_pointer_cast<MOSDPGNotify>(m));
case MSG_OSD_PG_INFO:
return handle_pg_info(conn, boost::static_pointer_cast<MOSDPGInfo>(m));
+ case MSG_OSD_PG_QUERY:
+ return handle_pg_query(conn, boost::static_pointer_cast<MOSDPGQuery>(m));
default:
return seastar::now();
}
});
}
+seastar::future<> OSD::handle_pg_query(ceph::net::ConnectionRef conn,
+ Ref<MOSDPGQuery> m)
+{
+ const int from = m->get_source().num();
+ return seastar::parallel_for_each(m->pg_list,
+ [from, this](pair<spg_t, pg_query_t> p) {
+ auto& [pgid, pg_query] = p;
+ MQuery query{pgid, pg_shard_t{from, pg_query.from},
+ pg_query, pg_query.epoch_sent};
+ auto evt = std::make_unique<PGPeeringEvent>(pg_query.epoch_sent,
+ pg_query.epoch_sent,
+ std::move(query));
+ return do_peering_event(pgid, std::move(evt));
+ });
+}
+
seastar::future<>
OSD::do_peering_event(spg_t pgid,
std::unique_ptr<PGPeeringEvent> evt)