]> 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>
Wed, 9 Apr 2025 19:39:50 +0000 (13:39 -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 5c5b8db70eccdd502c38effe6454b219e2031ff0..1277b5762145e70f97c06407f408cb4ce792471e 100644 (file)
@@ -205,7 +205,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 f136c98b2926ad0e763f55fae7bcbfe75549b399..04377e43e3a08c72e22aa1c77962ea0e1dfd3df7 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();