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: v12.2.13~196^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F28640%2Fhead;p=ceph.git mon/OSDMonitor: limit MOSDMap message size by bytes Signed-off-by: Sage Weil (cherry picked from commit dcf1cd00cc6e2595c283b4a73a4de9df50e7330a) Conflicts: src/mon/OSDMonitor.cc: 1. replace g_conf() with g_conf, g_conf was replaced with g_conf() to prepare for the crimson project. and that change was not backported to luminous. so restore all `g_conf()` to `g_conf` in this backport. 2. replace std::min() and std::max() with MIN() and MAX() macros, as we modernize it in an unrelated change. and that change was not backported to luminous. so let's be conservative, and restore to the old style macros. --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index f9a50f31c446..c798663470cc 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1854,17 +1854,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 = MAX(first, m->get_full_first()); - e <= MIN(last, m->get_full_last()) && max > 0; + e <= 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); assert(r >= 0); + max_bytes -= bl.length(); } for (epoch_t e = MAX(first, m->get_inc_first()); - e <= MIN(last, m->get_inc_last()) && max > 0; + e <= MIN(last, m->get_inc_last()) && max > 0 && max_bytes > 0; ++e, --max) { - int r = get_version(e, features, reply->incremental_maps[e]); - assert(r >= 0); + 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;