]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: get rid off BlueFS::_compact_log_async_dump_metadata_NF()
authorIgor Fedotov <igor.fedotov@croit.io>
Tue, 8 Nov 2022 14:51:12 +0000 (17:51 +0300)
committerIgor Fedotov <igor.fedotov@croit.io>
Thu, 26 Jan 2023 11:16:35 +0000 (14:16 +0300)
We can reuse _compact_log_dump_metadata_NF() instead

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 285df4b43e8096cb1b3c9c3c5b380cad759ea52c)

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

index 1ecafb248b61d11ff4fd10a7ee63c6a955c4c999..fa156fad06929ffd45c2d5fd776c5c5fa5978c18 100644 (file)
@@ -2323,76 +2323,46 @@ bool BlueFS::_should_start_compact_log_L_N()
 }
 
 void BlueFS::_compact_log_dump_metadata_NF(bluefs_transaction_t *t,
-                                       int flags)
+                                       int bdev_update_flags,
+                                        uint64_t capture_before_seq)
 {
   std::lock_guard nl(nodes.lock);
 
-  t->seq = 1;
-  t->uuid = super.uuid;
   dout(20) << __func__ << " op_init" << dendl;
-
-  t->op_init();
   for (auto& [ino, file_ref] : nodes.file_map) {
     if (ino == 1)
       continue;
     ceph_assert(ino > 1);
     std::lock_guard fl(file_ref->lock);
-    for(auto& e : file_ref->fnode.extents) {
-      auto bdev = e.bdev;
-      auto bdev_new = bdev;
-      ceph_assert(!((flags & REMOVE_WAL) && bdev == BDEV_WAL));
-      if ((flags & RENAME_SLOW2DB) && bdev == BDEV_SLOW) {
-       bdev_new = BDEV_DB;
-      }
-      if ((flags & RENAME_DB2SLOW) && bdev == BDEV_DB) {
-       bdev_new = BDEV_SLOW;
-      }
-      if (bdev == BDEV_NEWDB) {
-       // REMOVE_DB xor RENAME_DB
-       ceph_assert(!(flags & REMOVE_DB) != !(flags & RENAME_DB2SLOW));
-       ceph_assert(!(flags & RENAME_SLOW2DB));
-       bdev_new = BDEV_DB;
-      }
-      if (bdev == BDEV_NEWWAL) {
-       ceph_assert(flags & REMOVE_WAL);
-       bdev_new = BDEV_WAL;
+    if (bdev_update_flags) {
+      for(auto& e : file_ref->fnode.extents) {
+        auto bdev = e.bdev;
+        auto bdev_new = bdev;
+        ceph_assert(!((bdev_update_flags & REMOVE_WAL) && bdev == BDEV_WAL));
+        if ((bdev_update_flags & RENAME_SLOW2DB) && bdev == BDEV_SLOW) {
+         bdev_new = BDEV_DB;
+        }
+        if ((bdev_update_flags & RENAME_DB2SLOW) && bdev == BDEV_DB) {
+         bdev_new = BDEV_SLOW;
+        }
+        if (bdev == BDEV_NEWDB) {
+         // REMOVE_DB xor RENAME_DB
+         ceph_assert(!(bdev_update_flags & REMOVE_DB) != !(bdev_update_flags & RENAME_DB2SLOW));
+         ceph_assert(!(bdev_update_flags & RENAME_SLOW2DB));
+         bdev_new = BDEV_DB;
+        }
+        if (bdev == BDEV_NEWWAL) {
+         ceph_assert(bdev_update_flags & REMOVE_WAL);
+         bdev_new = BDEV_WAL;
+        }
+        e.bdev = bdev_new;
       }
-      e.bdev = bdev_new;
     }
-    dout(20) << __func__ << " op_file_update " << file_ref->fnode << dendl;
-    t->op_file_update(file_ref->fnode);
-  }
-  for (auto& [path, dir_ref] : nodes.dir_map) {
-    dout(20) << __func__ << " op_dir_create " << path << dendl;
-    t->op_dir_create(path);
-    for (auto& [fname, file_ref] : dir_ref->file_map) {
-      dout(20) << __func__ << " op_dir_link " << path << "/" << fname
-              << " to " << file_ref->fnode.ino << dendl;
-      t->op_dir_link(path, fname, file_ref->fnode.ino);
-    }
-  }
-}
-/* Streams to t files modified before *capture_before_seq* and all dirs */
-void BlueFS::_compact_log_async_dump_metadata_NF(bluefs_transaction_t *t,
-                                                uint64_t capture_before_seq)
-{
-  std::lock_guard nl(nodes.lock);
-
-  t->seq = 1;
-  t->uuid = super.uuid;
-  dout(20) << __func__ << " op_init" << dendl;
-
-  t->op_init();
-  for (auto& [ino, file_ref] : nodes.file_map) {
-    if (ino == 1)
-      continue;
-    ceph_assert(ino > 1);
-    std::lock_guard fl(file_ref->lock);
-    if (file_ref->dirty_seq < capture_before_seq) {
+    if (capture_before_seq == 0 || file_ref->dirty_seq < capture_before_seq) {
       dout(20) << __func__ << " op_file_update " << file_ref->fnode << dendl;
     } else {
       dout(20) << __func__ << " op_file_update just modified, dirty_seq="
-              << file_ref->dirty_seq << " " << file_ref->fnode << dendl;
+               << file_ref->dirty_seq << " " << file_ref->fnode << dendl;
     }
     t->op_file_update(file_ref->fnode);
   }
@@ -2450,8 +2420,9 @@ void BlueFS::_rewrite_log_and_layout_sync_LNF_LD(bool allocate_with_fallback,
                       << " flags:" << flags
                       << dendl;
   bluefs_transaction_t t;
-  _compact_log_dump_metadata_NF(&t, flags);
-
+  t.seq = 2;
+  t.uuid = super.uuid;
+  _compact_log_dump_metadata_NF(&t, flags, 0);
   dout(20) << __func__ << " op_jump_seq " << log.seq_live << dendl;
   t.op_jump_seq(log.seq_live);
 
@@ -2602,7 +2573,10 @@ void BlueFS::_compact_log_async_LD_LNF_D() //also locks FW for new_writer
 
   // 2. prepare compacted log
   bluefs_transaction_t t;
-  _compact_log_async_dump_metadata_NF(&t, seq_now);
+  t.seq = 1;
+  t.uuid = super.uuid;
+  t.op_init();
+  _compact_log_dump_metadata_NF(&t, 0, seq_now);
 
   // now state is captured to bufferlist
   // log can be used to write to, ops in log will be continuation of captured state
index 3c6b6d4571f8729a8f9276f7276f59f9a405a02a..5ff828023db7081d07fc08c7247503ba2dfa5e95 100644 (file)
@@ -457,9 +457,8 @@ private:
     RENAME_DB2SLOW = 8,
   };
   void _compact_log_dump_metadata_NF(bluefs_transaction_t *t,
-                                int flags);
-  void _compact_log_async_dump_metadata_NF(bluefs_transaction_t *t,
-                                          uint64_t capture_before_seq);
+                                int flags,
+                                uint64_t capture_before_seq);
 
   void _compact_log_sync_LNF_LD();
   void _compact_log_async_LD_LNF_D();