From: Yan, Zheng Date: Wed, 6 Nov 2013 02:58:00 +0000 (+0800) Subject: mds: merge delayed cache expire X-Git-Tag: v0.75~93^2~30 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2fea08b59c08ae4c08f1d12ce9586864beb6f4ea;p=ceph.git mds: merge delayed cache expire Signed-off-by: Yan, Zheng --- diff --git a/src/messages/MCacheExpire.h b/src/messages/MCacheExpire.h index df71404a29ba..b71ada741901 100644 --- a/src/messages/MCacheExpire.h +++ b/src/messages/MCacheExpire.h @@ -30,6 +30,19 @@ public: map dirs; map,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,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() {