Zero  0.1.0
buffer_pool_free_list.hpp
Go to the documentation of this file.
1 #ifndef __SM_BUFFER_POOL_FREE_LIST_HPP
2 #define __SM_BUFFER_POOL_FREE_LIST_HPP
3 
4 #include <atomic>
5 #include <queue>
6 
7 #include "sm_options.h"
8 #include "basics.h"
9 #include "exception.hpp"
10 
11 #include "cds/container/fcqueue.h"
12 #include "MPMCQueue/MPMCQueue.h"
13 
14 namespace zero::buffer_pool {
15  class BufferPool;
16 
17  class FreeList {
18  public:
19  FreeList(BufferPool* bufferpool, const sm_options& options);
20 
21  virtual void addFreeBufferpoolFrame(bf_idx freeFrame) = 0;
22 
23  virtual bool grabFreeBufferpoolFrame(bf_idx& freeFrame) = 0;
24 
25  virtual bf_idx getCount() = 0;
26 
28  public:
29  RunTimeException(std::string const& message) :
30  zero::RuntimeException(message) {};
31  };
32 
34  public:
36  RunTimeException("Failed to add buffer frame " + std::to_string(triedFrame)
37  + " to the free list of the buffer pool.") {};
38  };
39 
40  protected:
42  };
43 
45  public:
46  FreeListLowContention(BufferPool* bufferpool, const sm_options& options) noexcept;
47 
48  virtual void addFreeBufferpoolFrame(bf_idx freeFrame) noexcept final;
49 
50  virtual bool grabFreeBufferpoolFrame(bf_idx& freeFrame) noexcept final;
51 
52  virtual bf_idx getCount() final;
53 
54  private:
55  cds::container::FCQueue<bf_idx> list;
56  };
57 
59  public:
60  FreeListHighContention(BufferPool* bufferpool, const sm_options& options);
61 
62  virtual void addFreeBufferpoolFrame(bf_idx freeFrame) final;
63 
64  virtual bool grabFreeBufferpoolFrame(bf_idx& freeFrame) final;
65 
66  virtual bf_idx getCount() final;
67 
68  private:
69  rigtorp::MPMCQueue<bf_idx> list;
70 
72  };
73 } // zero::buffer_pool
74 
75 #endif // __SM_BUFFER_POOL_FREE_LIST_HPP
Definition: buffer_pool_free_list.hpp:58
virtual bool grabFreeBufferpoolFrame(bf_idx &freeFrame)=0
rigtorp::MPMCQueue< bf_idx > list
Definition: buffer_pool_free_list.hpp:69
Definition: buffer_pool_free_list.hpp:17
Definition: buffer_pool.hpp:34
FreeList(BufferPool *bufferpool, const sm_options &options)
Definition: buffer_pool_free_list.cpp:11
virtual bf_idx getCount()=0
RunTimeException(std::string const &message)
Definition: buffer_pool_free_list.hpp:29
STL namespace.
Start-up parameters for the storage engine. See OPTIONS.
Definition: sm_options.h:24
uint32_t bf_idx
Definition: basics.h:56
atomic_bf_idx approximateListLength
Definition: buffer_pool_free_list.hpp:71
virtual void addFreeBufferpoolFrame(bf_idx freeFrame)=0
AddFreeBufferpoolFrameException(bf_idx const triedFrame)
Definition: buffer_pool_free_list.hpp:35
A buffer manager that exploits the tree structure of indexes.
Definition: buffer_pool.hpp:40
BufferPool * bufferPool
Definition: buffer_pool_free_list.hpp:41
cds::container::FCQueue< bf_idx > list
Definition: buffer_pool_free_list.hpp:55
Definition: exception.hpp:50
std::atomic< uint32_t > atomic_bf_idx
Definition: basics.h:58
Definition: exception.hpp:49
Definition: buffer_pool_free_list.hpp:27
Definition: buffer_pool_free_list.hpp:33
Definition: buffer_pool_free_list.hpp:44