]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Don't pollute old journal when add new device 34219/head
authorYang Honggang <yanghonggang@kuaishou.com>
Thu, 26 Mar 2020 17:11:55 +0000 (17:11 +0000)
committerYang Honggang <yanghonggang@kuaishou.com>
Thu, 26 Mar 2020 17:13:26 +0000 (17:13 +0000)
Fixes: https://tracker.ceph.com/issues/44774
Signed-off-by: Yang Honggang <yanghonggang@kuaishou.com>
src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueFS.h
src/os/bluestore/BlueStore.cc

index 7dfbbc4afda6bfc5a74eb39474c31e181ed27f8d..f28e152f135bcd22c6f796383403427f3c4b5219 100644 (file)
@@ -327,10 +327,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());
@@ -339,7 +341,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 8a819034415615410137258c573ea1ea1c9b8774..74cbed7f24170cd15fbd37d9687874358ee1611b 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);
@@ -534,9 +535,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 700bc6918b8e08e809aa155e491c70ee703e4f5b..9bdb7d1547d783c341a7a164f8a96111d4552ba5 100644 (file)
@@ -6590,7 +6590,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, bluefs_layout);
   ceph_assert(r == 0);