MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
buffer_pool_log.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by wangyunlai on 2022/02/01
13//
14
15#pragma once
16
17#include "common/lang/string.h"
18#include "common/types.h"
19#include "common/sys/rc.h"
20#include "storage/clog/log_replayer.h"
21
22class DiskBufferPool;
24class LogHandler;
25struct Page;
26
32{
33public:
34 enum class Type : int32_t
35 {
36 ALLOCATE,
38 };
39
40public:
41 BufferPoolOperation(Type type) : type_(type) {}
42 explicit BufferPoolOperation(int32_t type) : type_(static_cast<Type>(type)) {}
43 ~BufferPoolOperation() = default;
44
45 Type type() const { return type_; }
46 int32_t type_id() const { return static_cast<int32_t>(type_); }
47
48 string to_string() const
49 {
50 string ret = std::to_string(type_id()) + ":";
51 switch (type_) {
52 case Type::ALLOCATE: return ret + "ALLOCATE";
53 case Type::DEALLOCATE: return ret + "DEALLOCATE";
54 default: return ret + "UNKNOWN";
55 }
56 }
57
58private:
59 Type type_;
60};
61
67{
68 int32_t buffer_pool_id;
70 PageNum page_num;
71
72 string to_string() const;
73};
74
80{
81public:
82 BufferPoolLogHandler(DiskBufferPool &buffer_pool, LogHandler &log_handler);
83 ~BufferPoolLogHandler() = default;
84
91 RC allocate_page(PageNum page_num, LSN &lsn);
92
98 RC deallocate_page(PageNum page_num, LSN &lsn);
99
104 RC flush_page(Page &page);
105
106private:
107 RC append_log(BufferPoolOperation::Type type, PageNum page_num, LSN &lsn);
108
109private:
110 DiskBufferPool &buffer_pool_;
111 LogHandler &log_handler_;
112};
113
119{
120public:
122 virtual ~BufferPoolLogReplayer() = default;
123
125 RC replay(const LogEntry &entry) override;
126
127private:
128 BufferPoolManager &bp_manager_;
129};
BufferPool 的日志记录处理器
Definition: buffer_pool_log.h:80
RC flush_page(Page &page)
刷新页面到磁盘之前,需要保证页面对应的日志也已经刷新到磁盘
Definition: buffer_pool_log.cpp:43
RC deallocate_page(PageNum page_num, LSN &lsn)
释放一个页面
Definition: buffer_pool_log.cpp:38
RC allocate_page(PageNum page_num, LSN &lsn)
分配一个页面
Definition: buffer_pool_log.cpp:33
BufferPool 的日志重放器
Definition: buffer_pool_log.h:119
RC replay(const LogEntry &entry) override
!
Definition: buffer_pool_log.cpp:63
BufferPool的管理类
Definition: disk_buffer_pool.h:322
BufferPool 的日志相关操作类型
Definition: buffer_pool_log.h:32
Type
Definition: buffer_pool_log.h:35
BufferPool的实现
Definition: disk_buffer_pool.h:189
描述一条日志
Definition: log_entry.h:44
对外提供服务的CLog模块
Definition: log_handler.h:40
日志回放接口类
Definition: log_replayer.h:26
BufferPool 的日志记录
Definition: buffer_pool_log.h:67
string to_string() const
page number
Definition: buffer_pool_log.cpp:20
int32_t operation_type
buffer pool id
Definition: buffer_pool_log.h:69
PageNum page_num
operation type
Definition: buffer_pool_log.h:70
表示一个页面,可能放在内存或磁盘上
Definition: page.h:34