]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/ZonedFreelistManager: simplify freelist merge update vs zone reset
authorSage Weil <sage@newdream.net>
Fri, 1 Oct 2021 18:14:26 +0000 (13:14 -0500)
committerSage Weil <sage@newdream.net>
Fri, 29 Oct 2021 13:56:42 +0000 (09:56 -0400)
Signed-off-by: Sage Weil <sage@newdream.net>
src/os/bluestore/BlueStore.cc
src/os/bluestore/ZonedFreelistManager.cc
src/os/bluestore/ZonedFreelistManager.h

index 3c57055b32108a6d2c35937aed40977fc7820c42..320909d6133a9656b5869a4e2f03ec12d430b7c5 100644 (file)
@@ -13159,8 +13159,7 @@ void BlueStore::_zoned_clean_zone(uint64_t zone)
   bdev->reset_zone(zone);
 
   // record that we can now write there
-  f->mark_zone_to_clean_free(zone, a->get_write_pointer(zone),
-                            a->get_dead_bytes(zone), db);
+  f->mark_zone_to_clean_free(zone, db);
   bdev->flush();
 
   // then allow ourselves to start allocating there
index 8f7f05ab425e4ac26698fbb32e25af1591d0152f..a940005e7a9909978f43ac3b13ad848a7a9a2654 100644 (file)
@@ -30,7 +30,7 @@ using ceph::bufferptr;
 using ceph::decode;
 using ceph::encode;
 
-void ZonedFreelistManager::write_zone_state_to_db(
+void ZonedFreelistManager::write_zone_state_delta_to_db(
   uint64_t zone_num,
   const zone_state_t &zone_state,
   KeyValueDB::Transaction txn)
@@ -42,6 +42,18 @@ void ZonedFreelistManager::write_zone_state_to_db(
   txn->merge(info_prefix, key, bl);
 }
 
+void ZonedFreelistManager::write_zone_state_reset_to_db(
+  uint64_t zone_num,
+  const zone_state_t &zone_state,
+  KeyValueDB::Transaction txn)
+{
+  string key;
+  _key_encode_u64(zone_num, &key);
+  bufferlist bl;
+  zone_state.encode(bl);
+  txn->set(info_prefix, key, bl);
+}
+
 void ZonedFreelistManager::load_zone_state_from_db(
   uint64_t zone_num,
   zone_state_t &zone_state,
@@ -62,7 +74,7 @@ void ZonedFreelistManager::init_zone_states(KeyValueDB::Transaction txn)
   dout(10) << __func__ << dendl;
   for (uint64_t zone_num = 0; zone_num < num_zones; ++zone_num) {
     zone_state_t zone_state;
-    write_zone_state_to_db(zone_num, zone_state, txn);
+    write_zone_state_reset_to_db(zone_num, zone_state, txn);
   }
 }
 
@@ -243,7 +255,7 @@ void ZonedFreelistManager::allocate(
             << " zone 0x" << zone_num << std::dec << dendl;
     zone_state_t zone_state;
     zone_state.increment_write_pointer(this_len);
-    write_zone_state_to_db(zone_num, zone_state, txn);
+    write_zone_state_delta_to_db(zone_num, zone_state, txn);
     offset += this_len;
     length -= this_len;
   }
@@ -267,7 +279,7 @@ void ZonedFreelistManager::release(
             << " zone 0x" << zone_num << std::dec << dendl;
     zone_state_t zone_state;
     zone_state.increment_num_dead_bytes(this_len);
-    write_zone_state_to_db(zone_num, zone_state, txn);
+    write_zone_state_delta_to_db(zone_num, zone_state, txn);
     length -= this_len;
     offset += this_len;
   }
@@ -345,13 +357,9 @@ int ZonedFreelistManager::_read_cfg(cfg_reader_t cfg_reader)
 
 void ZonedFreelistManager::mark_zone_to_clean_free(
   uint64_t zone,
-  uint64_t write_pointer,
-  uint64_t dead,
   KeyValueDB *kvdb)
 {
-  dout(10) << __func__ << " zone 0x" << std::hex << zone
-          << " (dead 0x" << dead << " write pointer 0x" << write_pointer
-          << ")" << std::dec << dendl;
+  dout(10) << __func__ << " zone 0x" << std::hex << zone << std::dec << dendl;
 
   if (true) {
     string key;
@@ -361,15 +369,11 @@ void ZonedFreelistManager::mark_zone_to_clean_free(
     zone_state_t zs;
     load_zone_state_from_db(zone, zs, it);
     dout(20) << __func__ << " before " << zs << dendl;
-    ceph_assert(zs.num_dead_bytes == dead);
-    ceph_assert(zs.write_pointer == write_pointer);
   }
   KeyValueDB::Transaction txn = kvdb->get_transaction();
 
-  zone_state_t neg_zone_state;
-  neg_zone_state.num_dead_bytes = 0ll - (int64_t)dead;
-  neg_zone_state.write_pointer = 0ll - (int64_t)write_pointer;
-  write_zone_state_to_db(zone, neg_zone_state, txn);
+  zone_state_t empty_zone_state;
+  write_zone_state_reset_to_db(zone, empty_zone_state, txn);
 
   // block here until this commits so that we don't end up starting to allocate and
   // write to the new zone before this fully commits.
index 4e0b040c80cd3b8b29c9415d3a8875e37e8fa4ca..378a20f0a7969d0907f5498d7e712a0bf2790cd5 100644 (file)
@@ -36,9 +36,12 @@ class ZonedFreelistManager : public FreelistManager {
   KeyValueDB::Iterator enumerate_p;
   uint64_t enumerate_zone_num;
 
-  void write_zone_state_to_db(uint64_t zone_num,
-                             const zone_state_t &zone_state,
-                             KeyValueDB::Transaction txn);
+  void write_zone_state_delta_to_db(uint64_t zone_num,
+                                   const zone_state_t &zone_state,
+                                   KeyValueDB::Transaction txn);
+  void write_zone_state_reset_to_db(uint64_t zone_num,
+                                   const zone_state_t &zone_state,
+                                   KeyValueDB::Transaction txn);
   void load_zone_state_from_db(uint64_t zone_num,
                               zone_state_t &zone_state,
                               KeyValueDB::Iterator &it) const;
@@ -104,7 +107,6 @@ public:
   std::vector<zone_state_t> get_zone_states(KeyValueDB *kvdb) const;
 
   void mark_zone_to_clean_free(uint64_t zone,
-                              uint64_t write_pointer, uint64_t dead,
                               KeyValueDB *kvdb);
 };