storage

package
v0.0.0-...-8909e19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 13, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

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

func SafeCreate(path string, perm uint32) (*os.File, error)

SafeCreate 安全地创建或覆盖文件。

参数:

  • path: 文件路径
  • perm: 文件权限(通常应为 0600)

返回:

  • *os.File: 打开的文件句柄
  • error: 创建失败时返回错误

行为:

如果父目录不存在,自动创建(权限 0700)。
如果文件已存在,会被截断。
文件以读写模式打开。

安全检查:

路径不能包含 .. 路径遍历组件。

func SafeMkdirAll

func SafeMkdirAll(path string, perm uint32) error

SafeMkdirAll 安全地创建目录及其所有父目录。

参数:

  • path: 要创建的目录路径
  • perm: 目录权限(通常应为 0700)

返回:

  • error: 创建失败时返回错误

行为:

首先确保父目录存在(使用 0700 权限),
然后创建目标目录并应用指定的权限。
这是为了兼容父目录可能需要不同的权限策略。

安全检查:

路径不能包含 .. 路径遍历组件。

func SafeOpenFile

func SafeOpenFile(name string, flag int, perm uint32) (*os.File, error)

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()

func SafeWriteFile

func SafeWriteFile(path string, data []byte, perm uint32) error

SafeWriteFile 安全地写入数据到文件。

参数:

  • path: 文件路径
  • data: 要写入的数据
  • perm: 文件权限(通常应为 0600)

行为:

先写入临时文件,再原子 rename,确保不会留下部分写入的文件。
自动创建父目录(权限 0700)。

安全检查:

路径不能包含 .. 路径遍历组件。

Types

type PathError

type PathError struct {
	Op   string
	Path string
	Err  error
}

PathError 表示路径安全检查失败

func (*PathError) Error

func (e *PathError) Error() string

func (*PathError) Unwrap

func (e *PathError) Unwrap() error

Directories

Path Synopsis
Package compaction 实现 Level Compaction 策略。
Package compaction 实现 Level Compaction 策略。
Package downsample 实现时序数据降采样服务。
Package downsample 实现时序数据降采样服务。
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 unordered 管理未排序 SSTable 文件(immutable memtable 集合)。
Package unordered 管理未排序 SSTable 文件(immutable memtable 集合)。
Package wal 实现 Write-Ahead Log。
Package wal 实现 Write-Ahead Log。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL