When we add an OSDMap to our in-memory cache, dedup against an existing map
at a nearby epoch.
Signed-off-by: Sage Weil <sage@newdream.net>
epoch_t e = o->get_epoch();
if (map_cache.count(e) == 0) {
dout(10) << "add_map " << e << " " << o << dendl;
+
+ // dedup against an existing map at nearby epoch
+ map<epoch_t,OSDMapRef>::iterator p = map_cache.lower_bound(e);
+ if (p == map_cache.end() && !map_cache.empty())
+ p--;
+ if (p != map_cache.end())
+ OSDMap::dedup(p->second.get(), o);
+
map_cache.insert(make_pair(e, OSDMapRef(o)));
} else {
dout(10) << "add_map " << e << " already have it" << dendl;