]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: merge delayed cache expire
authorYan, Zheng <zheng.z.yan@intel.com>
Wed, 6 Nov 2013 02:58:00 +0000 (10:58 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Mon, 16 Dec 2013 04:15:23 +0000 (12:15 +0800)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/messages/MCacheExpire.h

index df71404a29ba7d7c387274e579eb53a33e055c5c..b71ada741901de490800681da030b29f8a3abd68 100644 (file)
@@ -30,6 +30,19 @@ public:
     map<dirfrag_t, uint32_t> dirs;
     map<dirfrag_t, map<pair<string,snapid_t>,uint32_t> > dentries;
 
+    void merge(realm& o) {
+      inodes.insert(o.inodes.begin(), o.inodes.end());
+      dirs.insert(o.dirs.begin(), o.dirs.end());
+      for (map<dirfrag_t,map<pair<string,snapid_t>,uint32_t> >::iterator p = o.dentries.begin();
+          p != o.dentries.end();
+          ++p) {
+       if (dentries.count(p->first) == 0)
+         dentries[p->first] = p->second;
+       else
+         dentries[p->first].insert(p->second.begin(), p->second.end());
+      }
+    }
+
     void encode(bufferlist &bl) const {
       ::encode(inodes, bl);
       ::encode(dirs, bl);
@@ -68,7 +81,10 @@ public:
   }
 
   void add_realm(dirfrag_t df, realm& r) {
-    realms[df] = r;
+    if (realms.count(df) == 0)
+      realms[df] = r;
+    else
+      realms[df].merge(r);
   }
 
   void decode_payload() {