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: v13.2.7~148^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c731c85a55c5eeb4a32ac97ae4d0576acbdd4f6e;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 - g_conf(), ceph_assert --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7cff9ee9fc0c..3052719f1a51 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2163,17 +2163,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); 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); assert(r >= 0); + max_bytes -= bl.length(); } reply->oldest_map = first; reply->newest_map = last;