]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: dedup osdmaps when added to the in-memory cache
authorSage Weil <sage@newdream.net>
Wed, 25 Apr 2012 23:40:11 +0000 (16:40 -0700)
committerSage Weil <sage@newdream.net>
Fri, 27 Apr 2012 01:49:19 +0000 (18:49 -0700)
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>
src/osd/OSD.cc

index 31905c8c7c7147016d3e30028cd1fe06f417a968..137b168a0bb164e8759302d40bef9ace6c019415 100644 (file)
@@ -3726,6 +3726,14 @@ OSDMapRef OSD::add_map(OSDMap *o)
   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;