From: Patrick Donnelly Date: Wed, 16 Jan 2019 15:38:24 +0000 (-0800) Subject: mds/FSMap: simplify encode/decode X-Git-Tag: v14.1.0~334^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=42d903edbc6441e1e1babcafd18b6c8a13ef4564;p=ceph.git mds/FSMap: simplify encode/decode This removes an intermediary copy that was unnecessary. The encode/decode templates understand shared_ptrs. Signed-off-by: Patrick Donnelly --- diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index 89261f8d54c7..85a7c9744f98 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -387,11 +387,12 @@ void FSMap::encode(bufferlist& bl, uint64_t features) const encode(legacy_client_fscid, bl); encode(compat, bl); encode(enable_multiple, bl); - std::vector fs_list; - for (auto i : filesystems) { - fs_list.push_back(*(i.second)); + { + std::vector v; + v.reserve(filesystems.size()); + for (auto& p : filesystems) v.emplace_back(p.second); + encode(v, bl, features); } - encode(fs_list, bl, features); encode(mds_roles, bl); encode(standby_daemons, bl, features); encode(standby_epochs, bl); @@ -597,13 +598,15 @@ void FSMap::decode(bufferlist::const_iterator& p) decode(legacy_client_fscid, p); decode(compat, p); decode(enable_multiple, p); - std::vector fs_list; - decode(fs_list, p); - filesystems.clear(); - for (std::vector::const_iterator fs = fs_list.begin(); fs != fs_list.end(); ++fs) { - filesystems[fs->fscid] = Filesystem::create(*fs); + { + std::vector v; + decode(v, p); + filesystems.clear(); + for (auto& ref : v) { + auto em = filesystems.emplace(std::piecewise_construct, std::forward_as_tuple(ref->fscid), std::forward_as_tuple(std::move(ref))); + ceph_assert(em.second); + } } - decode(mds_roles, p); decode(standby_daemons, p); decode(standby_epochs, p);