]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/cephfs: make cephfs-data-scan prints the max used ino 23880/head
authorYan, Zheng <zyan@redhat.com>
Mon, 13 Aug 2018 01:56:04 +0000 (09:56 +0800)
committerNathan Cutler <ncutler@suse.com>
Sun, 2 Sep 2018 16:38:27 +0000 (18:38 +0200)
Fixes: http://tracker.ceph.com/issues/26925
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit e943ff0b8f22ac346b82d3f45351695aa8944121)

Conflicts:
doc/cephfs/disaster-recovery-experts.rst
- no such file in mimic

src/tools/cephfs/DataScan.cc

index ab64d1e38d9ded11be949b0dd389a0623c96e85e..2afee4c6ac8d534c87348c58d9f55ed07a412c50 100644 (file)
@@ -903,7 +903,7 @@ int DataScan::scan_links()
     return -EINVAL;
   }
 
-  interval_set<inodeno_t> used_inos;
+  interval_set<uint64_t> used_inos;
   map<inodeno_t, int> remote_links;
 
   struct link_info_t {
@@ -1035,6 +1035,28 @@ int DataScan::scan_links()
       }
     }
   }
+
+  map<unsigned, uint64_t> max_ino_map;
+  {
+    auto prev_max_ino = (uint64_t)1 << 40;
+    for (auto p = used_inos.begin(); p != used_inos.end(); ++p) {
+      auto cur_max = p.get_start() + p.get_len() - 1;
+      if (cur_max < prev_max_ino)
+       continue; // system inodes
+
+      if ((prev_max_ino >> 40)  != (cur_max >> 40)) {
+       unsigned rank = (prev_max_ino >> 40) - 1;
+       max_ino_map[rank] = prev_max_ino;
+      } else if ((p.get_start() >> 40) != (cur_max >> 40)) {
+       unsigned rank = (p.get_start() >> 40) - 1;
+       max_ino_map[rank] = ((uint64_t)(rank + 2) << 40) - 1;
+      }
+      prev_max_ino = cur_max;
+    }
+    unsigned rank = (prev_max_ino >> 40) - 1;
+    max_ino_map[rank] = prev_max_ino;
+  }
+
   used_inos.clear();
 
   for (auto& p : dup_primaries) {
@@ -1109,6 +1131,10 @@ int DataScan::scan_links()
       return r;
   }
 
+  for (auto& p : max_ino_map) {
+    std::cout << "mds." << p.first << " max used ino " << p.second << std::endl;
+  }
+
   return 0;
 }