MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Private 成员函数 | Private 属性 | 所有成员列表
DiskLogHandler类 参考

对外提供服务的CLog模块 更多...

#include <disk_log_handler.h>

类 DiskLogHandler 继承关系图:
LogHandler

Public 成员函数

RC init (const char *path) override
 初始化日志模块 更多...
 
RC start () override
 启动线程刷新日志到磁盘 更多...
 
RC stop () override
 设置停止标识,并不会真正的停止 更多...
 
RC await_termination () override
 等待线程结束 更多...
 
RC replay (LogReplayer &replayer, LSN start_lsn) override
 回放日志 更多...
 
RC iterate (function< RC(LogEntry &)> consumer, LSN start_lsn) override
 迭代日志 更多...
 
RC wait_lsn (LSN lsn) override
 等待指定的日志刷盘 更多...
 
LSN current_lsn () const override
 当前的LSN 更多...
 
LSN current_flushed_lsn () const
 当前刷新到哪个日志
 
- Public 成员函数 继承自 LogHandler
virtual RC init (const char *path)=0
 初始化日志模块 更多...
 
virtual RC start ()=0
 启动日志模块 更多...
 
virtual RC stop ()=0
 停止日志模块 更多...
 
virtual RC await_termination ()=0
 等待日志模块停止 更多...
 
virtual RC replay (LogReplayer &replayer, LSN start_lsn)=0
 回放日志 更多...
 
virtual RC iterate (function< RC(LogEntry &)> consumer, LSN start_lsn)=0
 迭代日志 更多...
 
virtual RC append (LSN &lsn, LogModule::Id module, span< const char > data)
 写入一条日志 更多...
 
virtual RC append (LSN &lsn, LogModule::Id module, vector< char > &&data)
 
virtual RC wait_lsn (LSN lsn)=0
 等待某个LSN的日志被刷新到磁盘 更多...
 
virtual LSN current_lsn () const =0
 

Private 成员函数

RC _append (LSN &lsn, LogModule module, vector< char > &&data) override
 在缓存中增加一条日志 更多...
 
void thread_func ()
 刷新日志的线程函数
 

Private 属性

unique_ptr< thread > thread_
 
atomic_bool running_ {false}
 刷新日志的线程
 
LogFileManager file_manager_
 是否还要继续运行
 
LogEntryBuffer entry_buffer_
 管理所有的日志文件
 
string path_
 缓存日志
 

额外继承的成员函数

- 静态 Public 成员函数 继承自 LogHandler
static RC create (const char *name, LogHandler *&handler)
 

详细描述

对外提供服务的CLog模块

该模块负责日志的写入、读取、回放等功能。 会在后台开启一个线程,一直尝试刷新内存中的日志到磁盘。 所有的CLog日志文件都存放在指定的目录下,每个日志文件按照日志条数来划分。 调用的顺序应该是:

handler.init("/path/to/log");
// replay 在一次启动只运行一次,它会计算当前日志的一些最新状态,必须在start之前执行
handler.replay(replayer, start_lsn);
handler.start();
handler.stop();
handler.wait();
对外提供服务的CLog模块
Definition: disk_log_handler.h:49
RC init(const char *path) override
初始化日志模块
Definition: disk_log_handler.cpp:26
RC start() override
启动线程刷新日志到磁盘
Definition: disk_log_handler.cpp:32
RC stop() override
设置停止标识,并不会真正的停止
Definition: disk_log_handler.cpp:45
RC replay(LogReplayer &replayer, LSN start_lsn) override
回放日志
Definition: disk_log_handler.cpp:76

成员函数说明

◆ _append()

RC DiskLogHandler::_append ( LSN &  lsn,
LogModule  module,
vector< char > &&  data 
)
overrideprivatevirtual

在缓存中增加一条日志

参数
[out]lsn返回的LSN
[in]module日志模块
[in]data日志数据。具体的数据由各个模块自己定义

实现了 LogHandler.

◆ await_termination()

RC DiskLogHandler::await_termination ( )
overridevirtual

等待线程结束

会刷新完所有日志到磁盘

实现了 LogHandler.

◆ current_lsn()

LSN DiskLogHandler::current_lsn ( ) const
inlineoverridevirtual

当前的LSN

实现了 LogHandler.

◆ init()

RC DiskLogHandler::init ( const char *  path)
overridevirtual

初始化日志模块

参数
path日志文件存放的目录

实现了 LogHandler.

◆ iterate()

RC DiskLogHandler::iterate ( function< RC(LogEntry &)>  consumer,
LSN  start_lsn 
)
overridevirtual

迭代日志

从start_lsn开始,迭代所有的日志。这仅仅是一个辅助函数。

参数
consumer消费者
start_lsn从哪个位置开始迭代

实现了 LogHandler.

◆ replay()

RC DiskLogHandler::replay ( LogReplayer replayer,
LSN  start_lsn 
)
overridevirtual

回放日志

日志回放后,会记录当前日志的最新状态,包括当前最大的LSN。 所以这个接口应该在启动之前调用一次。

参数
replayer回放日志接口
start_lsn从哪个位置开始回放

实现了 LogHandler.

◆ start()

RC DiskLogHandler::start ( )
overridevirtual

启动线程刷新日志到磁盘

实现了 LogHandler.

◆ stop()

RC DiskLogHandler::stop ( )
overridevirtual

设置停止标识,并不会真正的停止

实现了 LogHandler.

◆ wait_lsn()

RC DiskLogHandler::wait_lsn ( LSN  lsn)
overridevirtual

等待指定的日志刷盘

参数
lsn想要等待的日志

实现了 LogHandler.


该类的文档由以下文件生成: