]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: Allocator's cosmetic cleanup/improvement.
authorIgor Fedotov <igor.fedotov@croit.io>
Fri, 14 Jul 2023 14:10:58 +0000 (17:10 +0300)
committerJoshua Baergen <jbaergen@digitalocean.com>
Thu, 27 Mar 2025 16:33:01 +0000 (10:33 -0600)
Intended for the forthcoming major update with new allocator
implementation.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/os/bluestore/Allocator.cc
src/os/bluestore/Allocator.h
src/os/bluestore/AvlAllocator.cc
src/os/bluestore/AvlAllocator.h

index 60265939988e0477a658b44db22551b36ef2cf92..98963ccd5bdac775656744fe11b7a4e44fe71a14 100644 (file)
@@ -195,7 +195,7 @@ Allocator *Allocator::create(
 
 void Allocator::release(const PExtentVector& release_vec)
 {
-  interval_set<uint64_t> release_set;
+  release_set_t release_set;
   for (auto e : release_vec) {
     release_set.insert(e.offset, e.length);
   }
index f5a128fda8766d2d5c3257635d0f6453b550a5cf..932695d4ab08e30afd24ad1839d16cb9c1bf4138 100644 (file)
 #include "include/ceph_assert.h"
 #include "bluestore_types.h"
 
+typedef interval_set<uint64_t> release_set_t;
+typedef release_set_t::value_type release_set_entry_t;
+
 class Allocator {
+
 public:
   Allocator(std::string_view name,
            int64_t _capacity,
@@ -49,7 +53,7 @@ public:
 
   /* Bulk release. Implementations may override this method to handle the whole
    * set at once. This could save e.g. unnecessary mutex dance. */
-  virtual void release(const interval_set<uint64_t>& release_set) = 0;
+  virtual void release(const release_set_t& release_set) = 0;
   void release(const PExtentVector& release_set);
 
   virtual void dump() = 0;
index 8de249e978cbe325e57cb2f2e20c8a01d744f66f..564572bc7ff1a05f4d3377dc4382267b3a10b2ba 100644 (file)
@@ -324,7 +324,7 @@ int AvlAllocator::_allocate(
   return 0;
 }
 
-void AvlAllocator::_release(const interval_set<uint64_t>& release_set)
+void AvlAllocator::_release(const release_set_t& release_set)
 {
   for (auto p = release_set.begin(); p != release_set.end(); ++p) {
     const auto offset = p.get_start();
@@ -417,7 +417,7 @@ int64_t AvlAllocator::allocate(
   return _allocate(want, unit, max_alloc_size, hint, extents);
 }
 
-void AvlAllocator::release(const interval_set<uint64_t>& release_set) {
+void AvlAllocator::release(const release_set_t& release_set) {
   std::lock_guard l(lock);
   _release(release_set);
 }
index d79242a521cc53bc92d441f16a8c853cc89bba21..4ac0f6fb0c8a52338eca495c5d1c4bafac40552a 100644 (file)
@@ -81,7 +81,7 @@ public:
     uint64_t max_alloc_size,
     int64_t  hint,
     PExtentVector *extents) override;
-  void release(const interval_set<uint64_t>& release_set) override;
+  void release(const release_set_t& release_set) override;
   uint64_t get_free() override;
   double get_fragmentation() override;
 
@@ -93,6 +93,9 @@ public:
   void shutdown() override;
 
 private:
+  CephContext* cct;
+  std::mutex lock;
+
   // pick a range by search from cursor forward
   uint64_t _pick_block_after(
     uint64_t *cursor,
@@ -230,9 +233,11 @@ protected:
   // called when extent to be released/marked free
   virtual void _add_to_tree(uint64_t start, uint64_t size);
 
-protected:
-  CephContext* cct;
-  std::mutex lock;
+  CephContext* get_context() { return cct; }
+
+  std::mutex& get_lock() {
+    return lock;
+  }
 
   double _get_fragmentation() const {
     auto free_blocks = p2align(num_free, (uint64_t)block_size) / block_size;
@@ -246,7 +251,7 @@ protected:
 
   uint64_t _lowest_size_available() {
     auto rs = range_size_tree.begin();
-    return rs != range_size_tree.end() ? rs->length() : 0;
+    return rs != range_size_tree.end() ? rs->length() : std::numeric_limits<uint16_t>::max();
   }
 
   int64_t _allocate(
@@ -256,7 +261,7 @@ protected:
     int64_t  hint,
     PExtentVector *extents);
 
-  void _release(const interval_set<uint64_t>& release_set);
+  void _release(const release_set_t& release_set);
   void _release(const PExtentVector&  release_set);
   void _shutdown();