]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: compact db after bulk omap naming upgrade. 42218/head
authorIgor Fedotov <ifed@suse.com>
Wed, 7 Jul 2021 13:17:52 +0000 (16:17 +0300)
committerIgor Fedotov <ifed@suse.com>
Fri, 9 Jul 2021 09:31:29 +0000 (12:31 +0300)
Omap naming scheme upgrade introduced recently might perform bulk data
removal and hence leave DB in a "degraded" state. Let's compact it.

Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index ce189310377475911b8b74eeeabcedce5dedbdd4..ec27e5a89008a4b504f300c1793ebb9f98217f4e 100644 (file)
@@ -7888,6 +7888,7 @@ void BlueStore::_fsck_check_object_omap(FSCKDepth depth,
       }
       db->submit_transaction_sync(txn);
       repairer->inc_repaired();
+      repairer->request_compaction();
     }
   }
 }
@@ -16375,6 +16376,10 @@ unsigned BlueStoreRepairer::apply(KeyValueDB* db)
     ceph_assert(ok);
     fix_statfs_txn = nullptr;
   }
+  if (need_compact) {
+    db->compact();
+    need_compact = false;
+  }
   unsigned repaired = to_repair_cnt;
   to_repair_cnt = 0;
   return repaired;
index c08cc6d61aac8d55ec064acf5aad9304708c6e07..c9f3167219214878e00021df75e9a6e46176cb48 100644 (file)
@@ -3644,10 +3644,15 @@ public:
       ++to_repair_cnt;
     }
   }
-  // In fact this is the only repairer's method which is thread-safe!!
+  //////////////////////
+  //In fact two methods below are the only ones in this class which are thread-safe!!
   void inc_repaired() {
     ++to_repair_cnt;
   }
+  void request_compaction() {
+    need_compact = true;
+  }
+  //////////////////////
 
   void init_space_usage_tracker(
     uint64_t total_space, uint64_t lres_tracking_unit_size)
@@ -3680,6 +3685,7 @@ public:
 
 private:
   std::atomic<unsigned> to_repair_cnt = { 0 };
+  std::atomic<bool> need_compact = { false };
   KeyValueDB::Transaction fix_per_pool_omap_txn;
   KeyValueDB::Transaction fix_fm_leaked_txn;
   KeyValueDB::Transaction fix_fm_false_free_txn;