Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ragdoll-wal): wal接口对齐文档;文档补充setInterval;补充测试case #23

Merged
merged 1 commit into from
Feb 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
[submodule "doc/themes/stellar"]
path = doc/themes/stellar
url = https://github.com/xaoxuu/hexo-theme-stellar.git
# 主要用于配置主题
65 changes: 41 additions & 24 deletions docs/docs/core/ragdoll/write_ahead_log.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@

参数:

| 字段名 | 数据类型 | 描述 |
|---------------|----------------|------------------|
| **_dirPath_** | **_string_** | 存放日志数据文件的目录 |
| **_opts_** | **_*Options_** | 配置选项,不传配置将设置成默认值 |
| 字段名 | 数据类型 | 描述 |
|---------------|-------------------------------|------------------|
| **_dirPath_** | **_string_** | 存放日志数据文件的目录 |
| **_opts_** | [**_*Options_**](#newoptions) | 配置选项,不传配置将设置成默认值 |

返回值:

Expand Down Expand Up @@ -85,10 +85,10 @@ func main() {
}
```

### Open
### (*Log).Open

打开日志
为了避免内存泄漏,结束使用后需要显示调用 [**_Close_**](#close) 关闭日志文件
为了避免内存泄漏,结束使用后需要显示调用 [**_Close_**](#logclose) 关闭日志文件

返回值:

Expand Down Expand Up @@ -121,7 +121,7 @@ func main() {
}
```

### Close
### (*Log).Close

关闭日志实例,释放资源

Expand Down Expand Up @@ -162,7 +162,7 @@ func main() {
}
```

### Write
### (*Log).Write

写入日志数据

Expand All @@ -174,9 +174,9 @@ func main() {

返回值:

| 字段名 | 数据类型 | 描述 |
|----------------|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **_errs_** | **_*errs.KvErr_** | 可能出现的错误:<br/> <ul><li>**_errs.NewWalFullErr_** 日志目录触达存储上限,使用者应该主动检查该类型错误并在 [**_Truncate_**](#truncate) 后重新尝试写入,此时日志实例不会关闭,因此对日志实例的操作是安全的</li><li>**_errs.NewFileClosedErr_** 在日志实例已经关闭的情况下写入</li><li>**_errs.NewCorruptErr_** 在日志数据文件已经被破坏的情况下写入</li><li>**_errs.NewBackgroundErr_** 在日志实例后台协程执行失败的情况下写入</li><li>**_errs.NewInvalidParamErr_** 单次写入数据超过数据文件容量或写入空数据</li><li>**_errs.NewRenameFileErr_** 重命名数据文件失败</li><li>**_errs.NewParseIntErr_** 解析数据文件名失败</li><li>**_errs.NewCreateTempFileErr_** 创建临时文件失败</li><li>**_errs.NewSeekFileErr_** 重定位数据文件偏移量失败</li><li>**_errs.NewCopyFileErr_** 拷贝数据文件内容失败</li><li>**_errs.NewCloseFileErr_** 关闭数据文件失败</li><li>**_errs.NewWriteFileErr_** 写入数据文件失败</li><li>**_errs.NewSyncFileErr_** 同步数据文件到磁盘失败</li></ul> |
| 字段名 | 数据类型 | 描述 |
|----------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **_errs_** | **_*errs.KvErr_** | 可能出现的错误:<br/> <ul><li>**_errs.NewWalFullErr_** 日志目录触达存储上限,使用者应该主动检查该类型错误并在 [**_Truncate_**](#logtruncate) 后重新尝试写入,此时日志实例不会关闭,因此对日志实例的操作是安全的</li><li>**_errs.NewFileClosedErr_** 在日志实例已经关闭的情况下写入</li><li>**_errs.NewCorruptErr_** 在日志数据文件已经被破坏的情况下写入</li><li>**_errs.NewBackgroundErr_** 在日志实例后台协程执行失败的情况下写入</li><li>**_errs.NewInvalidParamErr_** 单次写入数据超过数据文件容量或写入空数据</li><li>**_errs.NewRenameFileErr_** 重命名数据文件失败</li><li>**_errs.NewParseIntErr_** 解析数据文件名失败</li><li>**_errs.NewCreateTempFileErr_** 创建临时文件失败</li><li>**_errs.NewSeekFileErr_** 重定位数据文件偏移量失败</li><li>**_errs.NewCopyFileErr_** 拷贝数据文件内容失败</li><li>**_errs.NewCloseFileErr_** 关闭数据文件失败</li><li>**_errs.NewWriteFileErr_** 写入数据文件失败</li><li>**_errs.NewSyncFileErr_** 同步数据文件到磁盘失败</li></ul> |

示例:

Expand Down Expand Up @@ -214,7 +214,7 @@ func main() {
}
}
```
### Read
### (*Log).Read

读取从最早写入日志算起指定范围内的日志数据

Expand All @@ -228,7 +228,7 @@ func main() {

| 字段名 | 数据类型 | 描述 |
|----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **_logsData_** | **_[][]byte_** | 查询范围内日志数据列表 |
| **_logsData_** | **_[][]byte_** | 查询范围内日志数据列表,按写入顺序有序 |
| **_errs_** | **_*errs.KvErr_** | 可能出现的错误:<br/> <ul><li>**_errs.NewFileClosedErr_** 在日志已经关闭的情况下读取 </li><li>**_errs.NewCorruptErrr_** 在日志数据已经被破坏的情况下读取 </li><li>**_errs.NewBackgroundErr_** 在日志后台协程执行失败的情况下读取 </li><li>**_errs.NewNotFoundErr_** 传入 **_size_** 不在有效范围内 </li><li>**_errs.NewOpenFileErr_** 打开目录锁文件、数据失败 </li><li>**_errs.NewReadFileErr_** 读取日志数据文件失败 </li><li>**_errs.NewCorruptErr_** 在日志数据已经被破坏的情况下写 </li></ul> |

示例:
Expand Down Expand Up @@ -267,7 +267,7 @@ func main() {
}
```

### Truncate
### (*Log).Truncate

截断指定数量的日志

Expand Down Expand Up @@ -327,7 +327,7 @@ func main() {
}
```

### Sync
### (*Log).Sync

同步内存中的日志数据到磁盘中

Expand Down Expand Up @@ -382,7 +382,7 @@ func main() {
}
```

### Len
### (*Log).Len

获取日志实例中存储的日志数量

Expand Down Expand Up @@ -430,7 +430,7 @@ func main() {
}
```

## 日志配置
## 配置实例

### NewOptions

Expand All @@ -442,7 +442,7 @@ func main() {
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |

### SetLogDirPerm
### (*Options).SetLogDirPerm

设置存放日志数据文件的目录权限

Expand All @@ -458,7 +458,7 @@ func main() {
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |

### SetDataFilePerm
### (*Options).SetDataFilePerm

设置日志数据文件权限

Expand All @@ -474,7 +474,7 @@ func main() {
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |

### SetDataFileCapacity
### (*Options).SetDataFileCapacity

设置日志数据文件最大容量

Expand All @@ -490,7 +490,7 @@ func main() {
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |

### SetDataFileCacheSize
### (*Options).SetDataFileCacheSize

设置日志实例在内存中最大缓存的日志数据文件数量

Expand All @@ -506,7 +506,7 @@ func main() {
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |

### SetSyncMode
### (*Options).SetSyncMode

设置日志实例的持久化级别

Expand All @@ -515,7 +515,7 @@ func main() {
日志提供三种数据持久化级别:
1. **全托管 - 同步(FullManagedSync)**:每次写日志都会将数据同步到磁盘,一致性好,但性能差。
2. **全托管 - 异步(FullManagedAsync)**:日志会先写入内存缓冲中,后台协程周期同步,这个时间默认是1s。
3. **自托管(SelfManaged)**:除非日志实例中的数据文件写满会自动同步数据到磁盘,否则日志数据只会写入到内存,需要外部主动调用 [**_Sync_**](#sync) 保证日志数据持久化。
3. **自托管(SelfManaged)**:除非日志实例中的数据文件写满会自动同步数据到磁盘,否则日志数据只会写入到内存,需要外部主动调用 [**_Sync_**](#logsync) 保证日志数据持久化。

参数:

Expand All @@ -528,4 +528,21 @@ func main() {

| 字段名 | 数据类型 | 描述 |
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |
| **_opts_** | **_*Options_** | 日志配置实例 |

### (*Options).SetSyncInterval

设置后台协程同步数据到磁盘的周期,只有设置持久化级别为 **全托管 - 异步(FullManagedAsync)** 时才生效

参数:

| 字段名 | 数据类型 | 描述 |
|--------------------|---------------------|----------------|
| **_syncInterval_** | **_time.Duration_** | 后台协程同步数据到磁盘的周期 |


返回值:

| 字段名 | 数据类型 | 描述 |
|------------|----------------|--------|
| **_opts_** | **_*Options_** | 日志配置实例 |
10 changes: 10 additions & 0 deletions storage/core/ragdoll/wal/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,13 @@ const suffix = ".active" // suffix 活跃segment文件的后缀标识
func getBaseFormat() string {
return utils.GetValueOnEnv("%010d", "%08d").(string)
}

// SyncMode 持久化模式
// 参考 https://trinoooo.github.io/eggie_kv/docs/core/ragdoll/write_ahead_log/#%E6%8C%81%E4%B9%85%E5%8C%96%E7%BA%A7%E5%88%AB
type SyncMode int64

const (
FullManagedSync SyncMode = iota // 全托管 - 同步
FullManagedAsync // 全托管 - 异步
SelfManaged // 自托管
)
Loading
Loading