Persister

package
v0.0.0-...-e11b555 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2020 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Always   = iota // 每条操作都进行刷盘,这样看来就不需要守护进程了
	Everysec        // 每秒进行一次刷盘,把raftstate和snapshot分别存到不同的文件中
	No              // 不主动刷盘
)

模仿redis AOF的命名,其实总体来看更像是RDB

Variables

This section is empty.

Functions

func PersisterDaemon

func PersisterDaemon(per *Persister)

* @brief: 负责按照策略进行持久化,其实这个守护协程值执行everysec策略

func ReadContentFromFile

func ReadContentFromFile(filepath string) ([]byte, error)

* @brief: 从文件中读出数据 * @return: 返回文件的[]byte和错误类型 * @notes: 使用这个函数的时候必须先判断err,再使用[]byte,被调用于服务器启动时,先读取两个文件,放到persister,然后传递给Raft,启动时就会自动读取了

func WriteContentToFile

func WriteContentToFile(vals []byte, outfile string, strategy int) error
  • @brief: 向文件写入数据
  • @return: 返回错误类型
  • @notes: 暂定给出存盘策略,遵循所选择策略刷入磁盘,一个守护协程负责按照策略刷入磁盘;no和everysec都会进入,everysec会刷盘.

TODO 目前需要json中选择持久化策略和存储的文件名, 记得查一下操作系统对于文件和文件夹的名称限制

需要在raft开始时跑一个守护协程,负责周期刷盘
并在服务器解析出文件名的时候进行读取,把数据传给persist,persist传给Raft

Types

type Persister

type Persister struct {

	// 持久化文件名取决于用户给予了用户很高的自由度,同时方便了测试
	SnapshotFileName    string // 快照的持久化文件名
	RaftstateFileName   string // raft状态的持久化名
	PersistenceStrategy int    // 对应着三条策略
	// contains filtered or unexported fields
}

func MakePersister

func MakePersister() *Persister

func (*Persister) Copy

func (ps *Persister) Copy() *Persister

func (*Persister) RaftStateSize

func (ps *Persister) RaftStateSize() int

func (*Persister) ReadRaftState

func (ps *Persister) ReadRaftState() []byte

func (*Persister) ReadRaftStateFromFile

func (ps *Persister) ReadRaftStateFromFile() []byte

* @brief: 从raftstate.hdb中读取RaftState * @return: 返回文件内容的[]byte

func (*Persister) ReadSnapshot

func (ps *Persister) ReadSnapshot() []byte

func (*Persister) ReadSnapshotFromFile

func (ps *Persister) ReadSnapshotFromFile() []byte

* @brief: 根据SnapshotFileName读取快照文件

func (*Persister) SaveRaftState

func (ps *Persister) SaveRaftState(state []byte)

func (*Persister) SaveSnapshot

func (ps *Persister) SaveSnapshot(snapshot []byte)

func (*Persister) SaveStateAndSnapshot

func (ps *Persister) SaveStateAndSnapshot(state []byte, snapshot []byte)

Save both Raft state and K/V snapshot as a single atomic action, to help avoid them getting out of sync.

func (*Persister) SnapshotSize

func (ps *Persister) SnapshotSize() int

Jump to

Keyboard shortcuts

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