]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Don't pollute old journal when add new device 34796/head
authorYang Honggang <yanghonggang@kuaishou.com>
Thu, 26 Mar 2020 17:11:55 +0000 (17:11 +0000)
committerNathan Cutler <ncutler@suse.com>
Tue, 28 Apr 2020 17:17:58 +0000 (19:17 +0200)
Fixes: https://tracker.ceph.com/issues/44774
Signed-off-by: Yang Honggang <yanghonggang@kuaishou.com>
(cherry picked from commit ade4d46981e660c8d57cec64180b5afa4561b945)

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

index 11cd606f589f37ea48a85ce148964a9c665fee62..9d6525c52f9612cc012336fffdc3facbfddf1eeb 100644 (file)
@@ -310,10 +310,12 @@ uint64_t BlueFS::get_block_device_size(unsigned id)
   return 0;
 }
 
-void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length)
+void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length,
+                               bool skip)
 {
   dout(1) << __func__ << " bdev " << id
          << " 0x" << std::hex << offset << "~" << length << std::dec
+         << " skip " << skip
          << dendl;
 
   ceph_assert(id < bdev.size());
@@ -322,7 +324,9 @@ void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length)
   block_all[id].insert(offset, length);
 
   if (id < alloc.size() && alloc[id]) {
-    log_t.op_alloc_add(id, offset, length);
+    if (!skip)
+      log_t.op_alloc_add(id, offset, length);
+
     alloc[id]->init_add_free(offset, length);
   }
 
index 439095f46793202db71ce2b8f7597e66a2e9b777..330080d38704bc9c55d3f4fde3db94135001f01e 100644 (file)
@@ -431,7 +431,8 @@ private:
     return 4096;
   }
 
-  void _add_block_extent(unsigned bdev, uint64_t offset, uint64_t len);
+  void _add_block_extent(unsigned bdev, uint64_t offset, uint64_t len,
+                         bool skip=false);
 
 public:
   BlueFS(CephContext* cct);
@@ -532,9 +533,10 @@ public:
   uint64_t get_block_device_size(unsigned bdev);
 
   /// gift more block space
-  void add_block_extent(unsigned bdev, uint64_t offset, uint64_t len) {
+  void add_block_extent(unsigned bdev, uint64_t offset, uint64_t len,
+                        bool skip=false) {
     std::unique_lock l(lock);
-    _add_block_extent(bdev, offset, len);
+    _add_block_extent(bdev, offset, len, skip);
     int r = _flush_and_sync_log(l);
     ceph_assert(r == 0);
   }
index 954dffa4531f5f2a97da7754c9b3f819b8aa7bc0..7af9ddaa98d68229788c11c040e9a46600be7b01 100644 (file)
@@ -6259,7 +6259,7 @@ int BlueStore::add_new_bluefs_device(int id, const string& dev_path)
   bluefs->add_block_extent(
     id,
     reserved,
-    bluefs->get_block_device_size(id) - reserved);
+    bluefs->get_block_device_size(id) - reserved, true);
 
   r = bluefs->prepare_new_device(id);
   ceph_assert(r == 0);