]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: use vector to define old_pools in PurgeItem and inode_backtrace_t
authorYan, Zheng <zyan@redhat.com>
Tue, 28 Jul 2020 07:42:10 +0000 (15:42 +0800)
committerYan, Zheng <ukernel@gmail.com>
Mon, 1 Feb 2021 05:46:21 +0000 (13:46 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/mds/CInode.cc
src/mds/PurgeQueue.h
src/mds/StrayManager.cc
src/mds/inode_backtrace.cc
src/mds/inode_backtrace.h
src/test/fs/mds_types.cc

index 4b159355e17f9b62f5111e92ba64d631b8d2a0ea..5439a76ba8f8783c0e20d05e06423f1a1dddd54c 100644 (file)
@@ -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);
   }
 }
 
index 270c99ac5166cfbaad486c257a53b7d7b7951b94..6e953d3e6333fb208148af48c223e3c2ef84829e 100644 (file)
@@ -73,7 +73,7 @@ public:
   inodeno_t ino = 0;
   uint64_t size = 0;
   file_layout_t layout;
-  compact_set<int64_t> old_pools;
+  std::vector<int64_t> old_pools;
   SnapContext snapc;
   fragtree_t fragtree;
 private:
index d85ab139dcea48b26e569948f7fd3aaf39ceaf73..363d0e5e94243a3ad6f62a92821d3de3459a371d 100644 (file)
@@ -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;
   }
 
index 061aaab838242133b5d6e3c212c1e610dfe0f467..be58d1bc3c0e0362294e6f27fbda1fbd472bdb36 100644 (file)
@@ -115,8 +115,8 @@ void inode_backtrace_t::generate_test_instances(std::list<inode_backtrace_t*>& 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,
index 5a6cc4ca76791a649fce00980cac613faa957f60..3e731e954707394ea6e8135b0b1969c85102e8a9 100644 (file)
@@ -81,8 +81,7 @@ struct inode_backtrace_t {
   inodeno_t ino;       // my ino
   std::vector<inode_backpointer_t> ancestors;
   int64_t pool = -1;
-  // we use a set for old_pools to avoid duplicate entries, e.g. setlayout 0, 1, 0
-  std::set<int64_t> old_pools;
+  std::vector<int64_t> old_pools;
 };
 WRITE_CLASS_ENCODER(inode_backtrace_t)
 
index 0a698203ea1cfca10d2d3300894eae83818f0abb..234d020a66ee71cc35bab2406c6a6a552022af39 100644 (file)
@@ -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;