Documentation
¶
Index ¶
- Constants
- Variables
- func EstimateBlockSize(dataSize int64) int64
- func WalFileName(dir string, fid uint32, ext string) string
- type ChunkHeader
- type ChunkIterator
- type ChunkPos
- type ChunkType
- type F
- type File
- type FileIterator
- type LogFile
- func (log *LogFile) Close() error
- func (log *LogFile) Fid() uint32
- func (log *LogFile) Iterator() (ChunkIterator, error)
- func (log *LogFile) MarkImmutable()
- func (log *LogFile) Read(block uint32, chunkOffset int64) ([]byte, error)
- func (log *LogFile) Remove() error
- func (log *LogFile) Size() int64
- func (log *LogFile) Sync() error
- func (log *LogFile) Write(data []byte) (ChunkPos, error)
- func (log *LogFile) WriteAll(data [][]byte) ([]ChunkPos, error)
- type LogFileChunkIterator
- type Option
- type Pending
- type Stat
- type Wal
- func (w *Wal) ActiveFid() uint32
- func (w *Wal) Close() error
- func (w *Wal) IsEmpty() bool
- func (w *Wal) Iterator(minFid, maxFid uint32, pos ChunkPos) (FileIterator, error)
- func (w *Wal) Pending(capacity int) *Pending
- func (w *Wal) Purge() error
- func (w *Wal) Read(pos ChunkPos) ([]byte, error)
- func (w *Wal) Rotate() error
- func (w *Wal) Stat() Stat
- func (w *Wal) Sync() error
- func (w *Wal) Write(data []byte) (ChunkPos, error)
- func (w *Wal) WriteAll(datas [][]byte, needSync bool) ([]ChunkPos, error)
Constants ¶
const ChunkHeaderSize = 7
ChunkHeaderSize +-----------+--------------+------------+------------+ | check sum | chunk length | chunk type | chunk data | +-----------+--------------+------------+------------+ | 4 Bytes | 2 Bytes | 1 Bytes | <= 32KB-7B | +-----------+--------------+------------+------------+
const DefaultWalSuffix = "wal"
DefaultWalSuffix is the extension name of wal file, default is wal. eg: 001.wal
const MaxBlockSize = 32 * types.KB
Variables ¶
var ( ErrAlreadyClosed = errors.New("file already closed") ErrBlockExceeded = errors.New("block size exceeded") ErrWriteToImmutable = errors.New("write to immutable") )
var ( ErrFileNotFound = errors.New("wal file not found") ErrDataExceedFile = errors.New("data size has exceeded the max file limit") )
Functions ¶
func EstimateBlockSize ¶ added in v0.3.0
EstimateBlockSize estimate the possible max size of data will be written in wal file if the first written block has already contains chunks, maybe occurs the first data chunk could be hold by the block but no left space to hold the second chunk header, in that case, the block need padding to fill the left space. padding + block * header + data size
Types ¶
type ChunkHeader ¶
type ChunkIterator ¶
type ChunkIterator interface {
// File returns file that iterator belongs to
File() File
// Index returns current chunk position
Index() ChunkPos
// Next returns the next chunk data bytes, chunk info, and error
Next() ([]byte, ChunkPos, error)
}
ChunkIterator iterate chunk data for a log file
type File ¶
type File interface {
// Fid return file id
Fid() uint32
// Read bytes with specified block and offset
// chunkOffset is offset by the start of the specified block
Read(block uint32, chunkOffset int64) ([]byte, error)
// Write bytes and returns ChunkPos
Write(data []byte) (ChunkPos, error)
// WriteAll write bytes in batch and returns ChunkPos
WriteAll(data [][]byte) ([]ChunkPos, error)
// Iterator iterate per chunk in file
Iterator() (ChunkIterator, error)
// Size return size of file
Size() int64
// Remove remove file
Remove() error
// Sync buffer to disk
Sync() error
// MarkImmutable mark this file as immutable
MarkImmutable()
// Close file and release resource
Close() error
}
File represents a wal file
type FileIterator ¶
type FileIterator struct {
// contains filtered or unexported fields
}
FileIterator iterates over all the files and chunks
func (*FileIterator) IndexFid ¶
func (f *FileIterator) IndexFid() uint32
IndexFid returns the current fid
func (*FileIterator) IndexPos ¶
func (f *FileIterator) IndexPos() ChunkPos
IndexPos returns curren index position
func (*FileIterator) NextFile ¶
func (f *FileIterator) NextFile()
type LogFile ¶
type LogFile struct {
// contains filtered or unexported fields
}
func (*LogFile) Iterator ¶
func (log *LogFile) Iterator() (ChunkIterator, error)
func (*LogFile) MarkImmutable ¶
func (log *LogFile) MarkImmutable()
type LogFileChunkIterator ¶
type LogFileChunkIterator struct {
// contains filtered or unexported fields
}
func (*LogFileChunkIterator) File ¶
func (l *LogFileChunkIterator) File() File
func (*LogFileChunkIterator) Index ¶
func (l *LogFileChunkIterator) Index() ChunkPos
type Option ¶
type Option struct {
// data dir
DataDir string
// max log file size
MaxFileSize int64
// log file extension
Ext string
// how many block will be cached, off if it is 0
BlockCache uint32
// sync buffer to disk per write, if not enabled data maybe not save when machine crashed
FsyncPerWrite bool
// specify the written threshold for triggering sync
FsyncThreshold int64
}
func DefaultOption ¶ added in v0.2.0
type Pending ¶ added in v0.2.0
type Pending struct {
// contains filtered or unexported fields
}
Pending provides a way to write data in batches
type Wal ¶
type Wal struct {
// contains filtered or unexported fields
}
Wal instance represents a data directory and its sub-files that store write-ahead-log format data
func (*Wal) Iterator ¶
func (w *Wal) Iterator(minFid, maxFid uint32, pos ChunkPos) (FileIterator, error)
Iterator returns an FileIterator maxFid determines the file range for the iterator pos determines the chunk position for the iterator