]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: compact db after bulk omap naming upgrade. 42375/head
authorIgor Fedotov <ifed@suse.com>
Wed, 7 Jul 2021 13:17:52 +0000 (16:17 +0300)
committerIgor Fedotov <ifed@suse.com>
Fri, 16 Jul 2021 12:43:43 +0000 (15:43 +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>
(cherry picked from commit 0e5c140b79a0b1809a8044696dce1eb7a36b1d41)

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

index 2be41f0183340918cb865254f479481df7892fdb..1fd385860d4fa438e04b64b0695bab6dee999624 100644 (file)
@@ -8213,6 +8213,7 @@ void BlueStore::_fsck_check_object_omap(FSCKDepth depth,
       }
       db->submit_transaction_sync(txn);
       repairer->inc_repaired();
+      repairer->request_compaction();
     }
   }
 }
@@ -16267,6 +16268,10 @@ unsigned BlueStoreRepairer::apply(KeyValueDB* db)
     db->submit_transaction_sync(fix_statfs_txn);
     fix_statfs_txn = nullptr;
   }
+  if (need_compact) {
+    db->compact();
+    need_compact = false;
+  }
   unsigned repaired = to_repair_cnt;
   to_repair_cnt = 0;
   return repaired;
index 2c1171d1bf9af6ee34c47c12ff84b4fd0144f176..218e59da862b9be6dbd806c13519a5791f29f644 100644 (file)
@@ -3538,10 +3538,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)
@@ -3574,6 +3579,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;