taco-db  0.1.0
BufferManager.h
Go to the documentation of this file.
1 // storage/BufferManager.h
2 #pragma once
3 
4 #include "tdb.h"
5 
6 #include <absl/container/flat_hash_map.h>
7 
8 #include "utils/Latch.h"
9 #include "utils/ResourceGuard.h"
10 
11 namespace taco {
12 
13 // private data structure
14 struct BufferMeta;
15 
16 struct BufferUnpin {
17  void operator()(BufferId bufid);
18 };
19 
20 struct BufferUnlatch {
21  void operator()(BufferId bufid);
22 };
23 
44 
51 
78 public:
83  BufferManager();
84 
90 
100  void Init(BufferId buffer_size);
101 
102 
114  void Destroy();
115 
129  BufferId PinPage(PageNumber pid, char **frame);
130 
142  BufferId PinPage(PageNumber pid, char **frame, FileId expected_fid);
143 
150  void UnpinPage(BufferId bufid);
151 
160  void
162  bufid.Reset();
163  }
164 
169  BufferId LatchPage(BufferId bufid, LatchMode mode);
170 
175  void UnlatchPage(BufferId bufid);
176 
182  bufid.Reset();
183  }
184 
191  void MarkDirty(BufferId bufid);
192 
199  PageNumber GetPageNumber(BufferId bufid) const;
200 
208  char* GetBuffer(BufferId bufid) const;
209 
210 private:
218  void Flush();
219 
221 
223  absl::flat_hash_map<PageNumber, BufferId> lookup_table;
228 
229 };
230 
231 } // namespace taco
232 
BufferManager implements a steal and no-force buffer pool with a fixed number of page frames to buffe...
Definition: BufferManager.h:77
void MarkDirty(BufferId bufid)
Marks a buffered page as dirty.
Definition: BufferManager.cpp:81
~BufferManager()
Destructs a buffer manager in any valid or invalid state.
Definition: BufferManager.cpp:19
char * buffer_frames
Definition: BufferManager.h:227
void Destroy()
Flushes all dirty pages back to disk and destroys the buffer manager.
Definition: BufferManager.cpp:38
void UnlatchPage(BufferId bufid)
You may ignore this function since we won't be implementing concurrency control and recovery.
Definition: BufferManager_private.cpp:39
BufferId clock_hand
Definition: BufferManager.h:225
BufferId PinPage(PageNumber pid, char **frame)
Pins the page in a buffer frame and sets *frame to the buffer frame (you may assume frame is never a ...
Definition: BufferManager.cpp:46
BufferManager()
Constructs a buffer manager that is uninitialized.
Definition: BufferManager.cpp:16
BufferId GetFreeFrame()
Definition: BufferManager.cpp:105
char * GetBuffer(BufferId bufid) const
Returns a pointer to the buffer frame with the given buffer ID.
Definition: BufferManager.cpp:146
absl::flat_hash_map< PageNumber, BufferId > lookup_table
Definition: BufferManager.h:223
void Flush()
Flushes all dirty page back to disk.
Definition: BufferManager.cpp:89
PageNumber GetPageNumber(BufferId bufid) const
Returns the page number of the pinned page in the specified buffer frame.
Definition: BufferManager.cpp:137
void UnlatchPage(ScopedBufferLatch bufid)
You may ignore this function since we won't be implementing concurrency control and recovery.
Definition: BufferManager.h:181
void Init(BufferId buffer_size)
Initializes a buffer manager.
Definition: BufferManager.cpp:27
bool initialized
Definition: BufferManager.h:222
BufferId LatchPage(BufferId bufid, LatchMode mode)
You may ignore this function since we won't be implementing concurrency control and recovery.
Definition: BufferManager_private.cpp:33
void UnpinPage(BufferId bufid)
Unpins the buffered page.
Definition: BufferManager.cpp:72
void UnpinPage(ScopedBufferId &bufid)
Unpins the buffered page.
Definition: BufferManager.h:161
BufferMeta * metas
Definition: BufferManager.h:226
BufferId n
Definition: BufferManager.h:224
void Reset()
Relinquishes the underlying resource and sets its to an invalid value.
Definition: ResourceGuard.h:124
Definition: datum.h:28
LatchMode
Definition: Latch.h:11
uint64_t BufferId
Definition: tdb_base.h:214
uint32_t FileId
The file ID.
Definition: tdb_base.h:221
uint32_t PageNumber
Definition: tdb_base.h:213
constexpr BufferId INVALID_BUFID
Definition: tdb_base.h:266
Definition: BufferManager.cpp:8
Definition: BufferManager.h:20
void operator()(BufferId bufid)
Definition: BufferManager_private.cpp:12
Definition: BufferManager.h:16
void operator()(BufferId bufid)
Definition: BufferManager_private.cpp:7