From: Sage Weil Date: Fri, 8 Feb 2019 13:22:28 +0000 (-0600) Subject: mon/OSDMonitor: limit MOSDMap message size by bytes X-Git-Tag: v14.1.0~149^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dcf1cd00cc6e2595c283b4a73a4de9df50e7330a;p=ceph.git mon/OSDMonitor: limit MOSDMap message size by bytes Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 0359653f08cb..b0c9fa18d77b 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2234,17 +2234,22 @@ bool OSDMonitor::preprocess_get_osdmap(MonOpRequestRef op) epoch_t first = get_first_committed(); epoch_t last = osdmap.get_epoch(); int max = g_conf()->osd_map_message_max; + ssize_t max_bytes = g_conf()->osd_map_message_max_bytes; for (epoch_t e = std::max(first, m->get_full_first()); - e <= std::min(last, m->get_full_last()) && max > 0; + e <= std::min(last, m->get_full_last()) && max > 0 && max_bytes > 0; ++e, --max) { - int r = get_version_full(e, features, reply->maps[e]); + bufferlist& bl = reply->maps[e]; + int r = get_version_full(e, features, bl); ceph_assert(r >= 0); + max_bytes -= bl.length(); } for (epoch_t e = std::max(first, m->get_inc_first()); - e <= std::min(last, m->get_inc_last()) && max > 0; + e <= std::min(last, m->get_inc_last()) && max > 0 && max_bytes > 0; ++e, --max) { - int r = get_version(e, features, reply->incremental_maps[e]); + bufferlist& bl = reply->incremental_maps[e]; + int r = get_version(e, features, bl); ceph_assert(r >= 0); + max_bytes -= bl.length(); } reply->oldest_map = first; reply->newest_map = last;