21#include <unordered_map>
26#include "storage/record/record.h"
27#include "storage/persist/persist.h"
28#include "common/lang/mutex.h"
52#define DEFINE_CLOG_TYPE_ENUM \
53 DEFINE_CLOG_TYPE(ERROR) \
54 DEFINE_CLOG_TYPE(MTR_BEGIN) \
55 DEFINE_CLOG_TYPE(MTR_COMMIT) \
56 DEFINE_CLOG_TYPE(MTR_ROLLBACK) \
57 DEFINE_CLOG_TYPE(INSERT) \
58 DEFINE_CLOG_TYPE(DELETE)
62#define DEFINE_CLOG_TYPE(name) name,
64#undef DEFINE_CLOG_TYPE
100 std::string to_string()
const;
117 std::string to_string()
const;
144 std::string to_string()
const;
221 std::string to_string()
const;
288 RC
init(
const char *path);
297 RC
write(
const char *data,
int len);
305 RC
read(
char *data,
int len);
315 RC
offset(int64_t &off)
const;
367 RC
init(
const char *path);
393 RC
commit_trx(int32_t trx_id, int32_t commit_xid);
缓存运行时产生的日志对象
Definition: clog.h:238
std::deque< std::unique_ptr< CLogRecord > > log_records_
当前等待刷数据的日志记录
Definition: clog.h:267
std::atomic_int32_t total_size_
当前缓存中的日志记录的总大小
Definition: clog.h:268
RC write_log_record(CLogFile &log_file, CLogRecord *log_record)
将日志记录写入到日志文件中
Definition: clog.cpp:255
RC flush_buffer(CLogFile &log_file)
将当前的日志都刷新到日志文件中
Definition: clog.cpp:225
RC append_log_record(CLogRecord *log_record)
增加一条日志
Definition: clog.cpp:207
common::Mutex lock_
加锁支持多线程并发写入
Definition: clog.h:266
读写日志文件
Definition: clog.h:278
RC read(char *data, int len)
读取指定长度的数据。全部读取成功返回成功,否则返回失败
Definition: clog.cpp:333
RC init(const char *path)
初始化
Definition: clog.cpp:296
RC write(const char *data, int len)
写入指定数据,全部写入成功返回成功,否则返回失败
Definition: clog.cpp:323
RC sync()
将当前写的文件执行sync同步数据到磁盘
Definition: clog.cpp:348
bool eof_
是否已经读取到文件尾
Definition: clog.h:325
std::string filename_
日志文件名。总是init函数参数path路径下的clog文件
Definition: clog.h:323
RC offset(int64_t &off) const
获取当前读取的文件位置
Definition: clog.cpp:358
bool eof() const
当前是否已经读取到文件尾
Definition: clog.h:320
int fd_
操作的文件描述符
Definition: clog.h:324
日志管理器
Definition: clog.h:357
RC rollback_trx(int32_t trx_id)
回滚一个事务
Definition: clog.cpp:480
RC init(const char *path)
初始化日志管理器
Definition: clog.cpp:427
RC begin_trx(int32_t trx_id)
开启一个事务
Definition: clog.cpp:463
CLogBuffer * log_buffer_
日志缓存。新增日志时先放到内存,也就是这个buffer中
Definition: clog.h:420
RC commit_trx(int32_t trx_id, int32_t commit_xid)
提交一个事务
Definition: clog.cpp:468
RC sync()
刷新日志到磁盘
Definition: clog.cpp:493
RC recover(Db *db)
重做
Definition: clog.cpp:498
RC append_log(CLogType type, int32_t trx_id, int32_t table_id, const RID &rid, int32_t data_len, int32_t data_offset, const char *data)
新增一条数据更新的日志
Definition: clog.cpp:447
CLogFile * log_file_
管理日志,比如读写日志
Definition: clog.h:421
日志记录遍历器
Definition: clog.h:334
表示一条日志记录
Definition: clog.h:156
CLogRecordData data_record_
如果日志操作的是数据,此结构生效
Definition: clog.h:226
static CLogRecord * build_commit_record(int32_t trx_id, int32_t commit_xid)
创建一个表示提交事务的日志对象
Definition: clog.cpp:106
CLogRecordCommitData commit_record_
如果是事务提交日志,此结构生效
Definition: clog.h:227
CLogRecord()=default
默认构造函数。
CLogRecordHeader header_
日志头信息
Definition: clog.h:224
static CLogRecord * build_mtr_record(CLogType type, int32_t trx_id)
创建一个事务相关的日志对象
Definition: clog.cpp:97
static CLogRecord * build_data_record(CLogType type, int32_t trx_id, int32_t table_id, const RID &rid, int32_t data_len, int32_t data_offset, const char *data)
创建一个表示数据操作的日志对象
Definition: clog.cpp:119
static CLogRecord * build(const CLogRecordHeader &header, char *data)
根据二进制数据创建日志对象
Definition: clog.cpp:152
一个DB实例负责管理一批表
Definition: db.h:34
int32_t clog_type_to_integer(CLogType type)
clog type 转换成数字
Definition: clog.cpp:42
CLogType
定义clog的几种类型
Definition: clog.h:61
const char * clog_type_name(CLogType type)
clog type 转换成字符串
Definition: clog.cpp:32
CLogType clog_type_from_integer(int32_t value)
数字转换成clog type
Definition: clog.cpp:46
MTR_COMMIT 日志的数据
Definition: clog.h:109
int32_t commit_xid_
事务提交的事务号
Definition: clog.h:110
有具体数据修改的事务日志数据
Definition: clog.h:126
int32_t table_id_
操作的表
Definition: clog.h:127
char * data_
具体的数据,可能没有任何数据
Definition: clog.h:131
int32_t data_len_
记录的数据长度(因为header中也包含长度信息,这个长度可以不要)
Definition: clog.h:129
static const int32_t HEADER_SIZE
指RecordData的头长度,即不包含data_的长度
Definition: clog.h:146
RID rid_
操作的哪条记录
Definition: clog.h:128
int32_t data_offset_
操作的数据在完整记录中的偏移量
Definition: clog.h:130
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35