Documentation
¶
Overview ¶
Package storage 提供存储相关的工具函数。
包括安全的文件和目录操作,确保正确的权限设置(0700 目录,0600 文件)。 所有函数都处理目录创建链,简化调用方的代码。
安全原则:
- 目录权限 0700 (rwx------)
- 文件权限 0600 (rw-------)
- 自动创建父目录
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrInvalidPath = &pathError{"path contains invalid components (../ or absolute path)"}
ErrInvalidPath 表示路径包含非法组件
Functions ¶
func SafeCreate ¶
SafeCreate 安全地创建或覆盖文件。
参数:
- path: 文件路径
- perm: 文件权限(通常应为 0600)
返回:
- *os.File: 打开的文件句柄
- error: 创建失败时返回错误
行为:
如果父目录不存在,自动创建(权限 0700)。 如果文件已存在,会被截断。 文件以读写模式打开。
安全检查:
路径不能包含 .. 路径遍历组件。
func SafeMkdirAll ¶
SafeMkdirAll 安全地创建目录及其所有父目录。
参数:
- path: 要创建的目录路径
- perm: 目录权限(通常应为 0700)
返回:
- error: 创建失败时返回错误
行为:
首先确保父目录存在(使用 0700 权限), 然后创建目标目录并应用指定的权限。 这是为了兼容父目录可能需要不同的权限策略。
安全检查:
路径不能包含 .. 路径遍历组件。
func SafeOpenFile ¶
SafeOpenFile 安全地打开或创建文件。
参数:
- name: 文件路径
- flag: 打开标志(如 os.O_RDWR|os.O_CREATE)
- perm: 文件权限(通常应为 0600)
返回:
- *os.File: 打开的文件句柄
- error: 操作失败时返回错误
行为:
与 os.OpenFile 类似,但会自动创建父目录(权限 0700)。 提供更细粒度的控制(如追加模式、只读模式等)。 适用于需要特定打开标志的场景。
安全检查:
路径不能包含 .. 路径遍历组件。
使用示例:
f, err := storage.SafeOpenFile("data/wal/0001.wal", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
if err != nil {
return err
}
defer f.Close()
Types ¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package metadata 提供全局元数据管理。
|
Package metadata 提供全局元数据管理。 |
|
Package shard 实现分片存储管理。
|
Package shard 实现分片存储管理。 |
|
compression
Package compression 提供数据压缩工具。
|
Package compression 提供数据压缩工具。 |
|
sstable
internal/storage/shard/sstable/index.go
|
internal/storage/shard/sstable/index.go |
|
Package wal 实现 Write-Ahead Log。
|
Package wal 实现 Write-Ahead Log。 |
Click to show internal directories.
Click to hide internal directories.