From: Jos Collin Date: Thu, 15 Oct 2020 11:30:50 +0000 (+0530) Subject: mds: detect mds-mds messages not of type MMDSOp X-Git-Tag: v16.1.0~787^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=05b6cbe908d5d5c58e051b5326821387d5e940ff;p=ceph.git mds: detect mds-mds messages not of type MMDSOp * Detect mds-mds messages not of type MMDSOp. * Return true from MetricAggregator::ms_dispatch2 only when the peer is an MDS and the metrics is handled. Fixes: https://tracker.ceph.com/issues/46426 Signed-off-by: Jos Collin --- diff --git a/src/mds/MetricAggregator.cc b/src/mds/MetricAggregator.cc index 03e06db64998..aee3bc2473b7 100644 --- a/src/mds/MetricAggregator.cc +++ b/src/mds/MetricAggregator.cc @@ -78,10 +78,14 @@ void MetricAggregator::ms_fast_dispatch2(const ref_t &m) { } bool MetricAggregator::ms_dispatch2(const ref_t &m) { - if (m->get_type() == MSG_MDS_METRICS) { - if (m->get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_MDS) { - handle_mds_metrics(ref_cast(m)); - } + if (m->get_type() == MSG_MDS_METRICS && + m->get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_MDS) { + const Message *msg = m.get(); + const MMDSOp *op = dynamic_cast(msg); + if (!op) + dout(0) << typeid(*msg).name() << " is not an MMDSOp type" << dendl; + ceph_assert(op); + handle_mds_metrics(ref_cast(m)); return true; } return false; diff --git a/src/mds/MetricsHandler.cc b/src/mds/MetricsHandler.cc index e63b6aca092e..cfcf3994b8c4 100644 --- a/src/mds/MetricsHandler.cc +++ b/src/mds/MetricsHandler.cc @@ -34,13 +34,16 @@ bool MetricsHandler::ms_dispatch2(const ref_t &m) { m->get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_CLIENT) { handle_client_metrics(ref_cast(m)); return true; - } - if (m->get_type() == MSG_MDS_PING && - m->get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_MDS) { + } else if (m->get_type() == MSG_MDS_PING && + m->get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_MDS) { + const Message *msg = m.get(); + const MMDSOp *op = dynamic_cast(msg); + if (!op) + dout(0) << typeid(*msg).name() << " is not an MMDSOp type" << dendl; + ceph_assert(op); handle_mds_ping(ref_cast(m)); return true; } - return false; }