]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: bluefs_layout_t tracks WAL presence.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 4 Sep 2019 06:24:04 +0000 (08:24 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 5 Sep 2019 09:57:51 +0000 (11:57 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/bluefs_types.h

index 20e51d5bb7281ba4dfc6447bb5c44ef18eb4f396..6e5a135bf0efb966e672daf97036751391674da1 100644 (file)
@@ -5200,7 +5200,7 @@ int BlueStore::_minimal_open_bluefs(bool create)
        bluefs->get_block_device_size(BlueFS::BDEV_DB) - SUPER_RESERVED);
     }
     bluefs_layout.shared_bdev = BlueFS::BDEV_SLOW;
-    bluefs_layout.single_shared_device = false;
+    bluefs_layout.dedicated_db = true;
   } else {
     r = -errno;
     if (::lstat(bfn.c_str(), &st) == -1) {
@@ -5278,7 +5278,7 @@ int BlueStore::_minimal_open_bluefs(bool create)
          bluefs->get_block_device_size(BlueFS::BDEV_WAL) -
          BDEV_LABEL_BLOCK_SIZE);
     }
-    bluefs_layout.single_shared_device = false;
+    bluefs_layout.dedicated_wal = true;
   } else {
     r = 0;
     if (::lstat(bfn.c_str(), &st) != -1) {
@@ -8321,8 +8321,13 @@ void BlueStore::collect_metadata(map<string,string> *pm)
   bdev->collect_metadata("bluestore_bdev_", pm);
   if (bluefs) {
     (*pm)["bluefs"] = "1";
+    // this value is for backward compatibility only
     (*pm)["bluefs_single_shared_device"] = \
-      stringify((int)bluefs_layout.single_shared_device);
+      stringify((int)bluefs_layout.single_shared_device());
+    (*pm)["bluefs_dedicated_db"] = \
+       stringify((int)bluefs_layout.dedicated_db);
+    (*pm)["bluefs_dedicated_wal"] = \
+       stringify((int)bluefs_layout.dedicated_wal);
     bluefs->collect_metadata(pm, bluefs_layout.shared_bdev);
   } else {
     (*pm)["bluefs"] = "0";
@@ -10879,7 +10884,7 @@ void BlueStore::_kv_sync_thread()
       // can rely on the bluefs commit to flush the device and make
       // deferred aios stable.  that means that if we do have done deferred
       // txcs AND we are not on a single device, we need to force a flush.
-      if (bluefs_layout.single_shared_device && bluefs) {
+      if (bluefs && bluefs_layout.single_shared_device()) {
        if (aios) {
          force_flush = true;
        } else if (kv_committing.empty() && deferred_stable.empty()) {
index 985119822b574858725748c46db6367215e58a80..9046e511d9d0c3dbb36a795cf6862130c7f1840b 100644 (file)
@@ -131,8 +131,13 @@ WRITE_CLASS_DENC(bluefs_fnode_t)
 ostream& operator<<(ostream& out, const bluefs_fnode_t& file);
 
 struct bluefs_layout_t {
-  unsigned shared_bdev = 0;      ///< which bluefs bdev we are sharing
-  bool single_shared_device = true;
+  unsigned shared_bdev = 0;         ///< which bluefs bdev we are sharing
+  bool dedicated_db = false;        ///< whether block.db is present
+  bool dedicated_wal = false;       ///< whether block.wal is present
+
+  bool single_shared_device() const {
+    return !dedicated_db && !dedicated_wal;
+  }
 };
 
 struct bluefs_super_t {