From 35753eb7761cd37d8c20b808e390df2b67a4eb64 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 16 Aug 2012 13:38:54 -0700 Subject: [PATCH] osd: avoid generate huge osdmap deletion transactions Cap the number of maps we delete on each pass through handle_osd_map. As long as the target transaction size is larger than the number of maps we get in each message, we'll be fine. Ensure we at least keep pace with incoming maps in case those values' relative sizes nave flipped. Fixes: #2856 Signed-off-by: Sage Weil --- src/osd/OSD.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index ed4e61f4c2b9d..786558ae6c1bc 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3519,11 +3519,16 @@ void OSD::handle_osd_map(MOSDMap *m) } if (superblock.oldest_map) { + int num = 0; for (epoch_t e = superblock.oldest_map; e < m->oldest_map; ++e) { dout(20) << " removing old osdmap epoch " << e << dendl; t.remove(coll_t::META_COLL, get_osdmap_pobject_name(e)); t.remove(coll_t::META_COLL, get_inc_osdmap_pobject_name(e)); superblock.oldest_map = e+1; + num++; + if (num >= g_conf->osd_target_transaction_size && + num > (last - first)) // make sure we at least keep pace with incoming maps + break; } } -- 2.39.5