From: Yan, Zheng Date: Tue, 28 Jul 2020 07:42:10 +0000 (+0800) Subject: mds: use vector to define old_pools in PurgeItem and inode_backtrace_t X-Git-Tag: v17.1.0~2726^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e2604b4e56f16cd54c45bdc74ddf3c2a6490692f;p=ceph.git mds: use vector to define old_pools in PurgeItem and inode_backtrace_t Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 4b159355e17f..5439a76ba8f8 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -1289,10 +1289,11 @@ void CInode::build_backtrace(int64_t pool, inode_backtrace_t& bt) in = diri; pdn = in->get_parent_dn(); } + bt.old_pools.reserve(get_inode()->old_pools.size()); for (auto &p : get_inode()->old_pools) { // don't add our own pool id to old_pools to avoid looping (e.g. setlayout 0, 1, 0) if (p != pool) - bt.old_pools.insert(p); + bt.old_pools.push_back(p); } } diff --git a/src/mds/PurgeQueue.h b/src/mds/PurgeQueue.h index 270c99ac5166..6e953d3e6333 100644 --- a/src/mds/PurgeQueue.h +++ b/src/mds/PurgeQueue.h @@ -73,7 +73,7 @@ public: inodeno_t ino = 0; uint64_t size = 0; file_layout_t layout; - compact_set old_pools; + std::vector old_pools; SnapContext snapc; fragtree_t fragtree; private: diff --git a/src/mds/StrayManager.cc b/src/mds/StrayManager.cc index d85ab139dcea..363d0e5e9424 100644 --- a/src/mds/StrayManager.cc +++ b/src/mds/StrayManager.cc @@ -133,9 +133,11 @@ void StrayManager::purge(CDentry *dn) item.size = to; item.layout = pi->layout; - item.old_pools.clear(); - for (const auto &p : pi->old_pools) - item.old_pools.insert(p); + item.old_pools.reserve(pi->old_pools.size()); + for (const auto &p : pi->old_pools) { + if (p != pi->layout.pool_id) + item.old_pools.push_back(p); + } item.snapc = *snapc; } diff --git a/src/mds/inode_backtrace.cc b/src/mds/inode_backtrace.cc index 061aaab83824..be58d1bc3c0e 100644 --- a/src/mds/inode_backtrace.cc +++ b/src/mds/inode_backtrace.cc @@ -115,8 +115,8 @@ void inode_backtrace_t::generate_test_instances(std::list& l ls.back()->ancestors.back().dname = "bar"; ls.back()->ancestors.back().version = 456; ls.back()->pool = 0; - ls.back()->old_pools.insert(10); - ls.back()->old_pools.insert(7); + ls.back()->old_pools.push_back(10); + ls.back()->old_pools.push_back(7); } int inode_backtrace_t::compare(const inode_backtrace_t& other, diff --git a/src/mds/inode_backtrace.h b/src/mds/inode_backtrace.h index 5a6cc4ca7679..3e731e954707 100644 --- a/src/mds/inode_backtrace.h +++ b/src/mds/inode_backtrace.h @@ -81,8 +81,7 @@ struct inode_backtrace_t { inodeno_t ino; // my ino std::vector ancestors; int64_t pool = -1; - // we use a set for old_pools to avoid duplicate entries, e.g. setlayout 0, 1, 0 - std::set old_pools; + std::vector old_pools; }; WRITE_CLASS_ENCODER(inode_backtrace_t) diff --git a/src/test/fs/mds_types.cc b/src/test/fs/mds_types.cc index 0a698203ea1c..234d020a66ee 100644 --- a/src/test/fs/mds_types.cc +++ b/src/test/fs/mds_types.cc @@ -111,8 +111,8 @@ TEST(inode_backtrace_t, compare_equal) foo.ino = 1234; foo.pool = 12; - foo.old_pools.insert(10); - foo.old_pools.insert(5); + foo.old_pools.push_back(10); + foo.old_pools.push_back(5); inode_backpointer_t foop; foop.dirino = 3; @@ -147,12 +147,12 @@ TEST(inode_backtrace_t, compare_newer) foo.ino = 1234; foo.pool = 12; - foo.old_pools.insert(10); - foo.old_pools.insert(5); + foo.old_pools.push_back(10); + foo.old_pools.push_back(5); bar.ino = 1234; bar.pool = 12; - bar.old_pools.insert(10); + bar.old_pools.push_back(10); inode_backpointer_t foop; foop.dirino = 3; @@ -211,12 +211,12 @@ TEST(inode_backtrace_t, compare_divergent) foo.ino = 1234; foo.pool = 12; - foo.old_pools.insert(10); - foo.old_pools.insert(5); + foo.old_pools.push_back(10); + foo.old_pools.push_back(5); bar.ino = 1234; bar.pool = 12; - bar.old_pools.insert(10); + bar.old_pools.push_back(10); inode_backpointer_t foop; foop.dirino = 3;