]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: show space available from bluestore when dumping bluefs devices.
authorIgor Fedotov <ifedotov@suse.com>
Mon, 16 Mar 2020 13:40:54 +0000 (16:40 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Fri, 17 Apr 2020 10:28:45 +0000 (13:28 +0300)
This effectively allows ceph-bluestore-tool to report space available from bluestore
for bluefs-bdev-sizes command, i.e. estimate how utilized main device is.

Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 7662fce0439456cc3aa4da23248321a4ff90745e)

src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h
src/os/bluestore/bluestore_tool.cc

index 16a5b223f5613ca9562522ad5f3b99a75b81d1eb..fa0c465d3060e63f8239554cdd53a85e3d93ebd3 100644 (file)
@@ -431,12 +431,22 @@ void BlueFS::dump_block_extents(ostream& out)
     }
     auto owned = get_total(i);
     auto free = get_free(i);
+
     out << i << " : device size 0x" << std::hex << bdev[i]->get_size()
         << " : own 0x" << block_all[i]
         << " = 0x" << owned
         << " : using 0x" << owned - free
-       << std::dec << "(" << byte_u_t(owned - free) << ")"
-        << "\n";
+       << std::dec << "(" << byte_u_t(owned - free) << ")";
+    if (i == BDEV_SLOW) {
+      ceph_assert(slow_dev_expander);
+      int id = _get_slow_device_id();
+      ceph_assert(alloc[id]);
+      free = slow_dev_expander->available_freespace(alloc_size[id]);
+      out << std::hex
+          << " : bluestore has 0x" << free
+          << std::dec << "(" << byte_u_t(free) << ") available";
+    }
+    out << "\n";
   }
 }
 
index 14c20bc016988af1bb57cdd9186aefa01a82a700..e2c6c70196e0b6cc066e7b405004066c437a662a 100644 (file)
@@ -5670,8 +5670,7 @@ int BlueStore::_open_db(bool create, bool to_repair_db, bool read_only)
         (void)r;
       }
       env = new rocksdb::EnvMirror(b, a, false, true);
-    }
-    else {
+    } else {
       env = new BlueRocksEnv(bluefs);
 
       // simplify the dir names, too, as "seen" by rocksdb
@@ -6878,6 +6877,15 @@ int BlueStore::expand_devices(ostream& out)
   return r;
 }
 
+int BlueStore::dump_bluefs_sizes(ostream& out)
+{
+  int r = _mount(true);
+  ceph_assert(r == 0);
+  bluefs->dump_block_extents(out);
+  umount();
+  return r;
+}
+
 void BlueStore::set_cache_shards(unsigned num)
 {
   dout(10) << __func__ << " " << num << dendl;
index 1185a1b775a6bff6d68851a69d8c9be6f0dd8630..cf1e994465a82b02eed34f037e202372e15d6e44 100644 (file)
@@ -2572,6 +2572,8 @@ public:
   int expand_devices(ostream& out);
   string get_device_path(unsigned id);
 
+  int dump_bluefs_sizes(ostream& out);
+
 public:
   int statfs(struct store_statfs_t *buf,
              osd_alert_list_t* alerts = nullptr) override;
index 66b5a796dde294f4a68ff2c769551db63a9af2ae..b5f005797321eb6b550620b86d3cf452a60ee357 100644 (file)
@@ -561,9 +561,8 @@ int main(int argc, char **argv)
     }
   }
   else if (action == "bluefs-bdev-sizes") {
-    BlueFS *fs = open_bluefs(cct.get(), path, devs);
-    fs->dump_block_extents(cout);
-    delete fs;
+    BlueStore bluestore(cct.get(), path);
+    bluestore.dump_bluefs_sizes(cout);
   }
   else if (action == "bluefs-bdev-expand") {
     BlueStore bluestore(cct.get(), path);