Documentation ¶
Index ¶
- Variables
- type Chansema
- type Coder
- type EntryContainer
- type EntryElemnet
- type EntryIterator
- func (it *EntryIterator) HasNext() bool
- func (it *EntryIterator) HasNextN(n int) bool
- func (it *EntryIterator) HasPre() bool
- func (it *EntryIterator) HasPreN(n int) bool
- func (it *EntryIterator) Next() *EntryElemnet
- func (it *EntryIterator) NextN(n int) *EntryElemnet
- func (it *EntryIterator) Previous() *EntryElemnet
- func (it *EntryIterator) PreviousN(n int) *EntryElemnet
- func (it *EntryIterator) Release()
- func (it *EntryIterator) SkipToFirst()
- func (it *EntryIterator) SkipToLast()
- type FileLock
- type FileType
- type FlushStrategy
- type LogEntry
- type Lws
- func (l *Lws) Close()
- func (l *Lws) Flush() error
- func (l *Lws) NewLogIterator() *EntryIterator
- func (l *Lws) Purge(opt ...PurgeOpt) error
- func (l *Lws) ReadFromFile(file string) (*EntryIterator, error)
- func (l *Lws) RegisterCoder(c Coder) error
- func (l *Lws) UnregisterCoder(t int8) error
- func (l *Lws) Write(typ int8, obj interface{}) error
- func (l *Lws) WriteBytes(data []byte) (uint64, error)
- func (l *Lws) WriteRetIndex(typ int8, obj interface{}) (uint64, error)
- func (l *Lws) WriteToFile(file string, typ int8, obj interface{}) error
- type LwsFile
- type Opt
- func WithBufferSize(s int) Opt
- func WithEntryLimitForPurge(l int) Opt
- func WithFileExtension(ext string) Opt
- func WithFileLimitForPurge(l int) Opt
- func WithFilePrex(prex string) Opt
- func WithMmapFileLock() Opt
- func WithSegmentSize(s int64) Opt
- func WithWriteFileType(ft FileType) Opt
- func WithWriteFlag(wf WriteFlag, quota int) Opt
- type Options
- type PurgeOpt
- type PurgeOptions
- type ReaderCache
- func (rc *ReaderCache) CleanReader()
- func (rc *ReaderCache) DeleteReader(segmentID uint64) *refReader
- func (rc *ReaderCache) GetAndNewReader(segmentID uint64, new func() (*refReader, error)) (*refReader, error)
- func (rc *ReaderCache) GetReader(segmentID uint64) *refReader
- func (rc *ReaderCache) PutReader(segmentID uint64, rr *refReader)
- type Segment
- type SegmentGroup
- func (sg *SegmentGroup) Append(s *Segment)
- func (sg *SegmentGroup) Assign(i int, s *Segment)
- func (sg *SegmentGroup) At(i int) *Segment
- func (sg *SegmentGroup) Cap() int
- func (sg *SegmentGroup) FindAt(idx uint64) *Segment
- func (sg *SegmentGroup) First() *Segment
- func (sg *SegmentGroup) ForEach(fn func(i int, s *Segment) bool)
- func (sg *SegmentGroup) Last() *Segment
- func (sg *SegmentGroup) Len() int
- func (sg *SegmentGroup) Reserved(n int)
- func (sg *SegmentGroup) Resize(n int)
- func (sg *SegmentGroup) Split(i int) (SegmentGroup, SegmentGroup)
- type SegmentProcessor
- type SegmentReader
- type SegmentWriter
- type WriteFlag
- type WriterOptions
Constants ¶
This section is empty.
Variables ¶
var ( ErrCoderExist = errors.New("this type coder has exist") ErrCoderNotExist = errors.New("this type coder not exist") ErrCodeSysType = errors.New("the coder type is system reservation type") RawCoderType int8 = 0 )
var ( ErrPurgeWorkExisted = errors.New("purge work has been performed") ErrPurgeNotReached = errors.New("purge threshold not reached") InitID = 1 InitIndex = 1 )
var ( ErrFileTypeNotSupport = errors.New("this file type is not supported") ErrSegmentIndex = errors.New("index out of segment range") )
Functions ¶
This section is empty.
Types ¶
type Chansema ¶
type Chansema struct {
// contains filtered or unexported fields
}
chan实现的信号量
func NewChansema ¶
func (*Chansema) Acquire ¶
Acquire block acquiring semaphore until acquire successfully or context cancel/timeout
func (*Chansema) TryAcquire ¶
TryAcquire non-block acquiring semaphore,if successfully return true, otherwise return false
type EntryContainer ¶
type EntryElemnet ¶
type EntryElemnet struct {
// contains filtered or unexported fields
}
func (*EntryElemnet) Get ¶
func (ele *EntryElemnet) Get() ([]byte, error)
func (*EntryElemnet) GetObj ¶
func (ele *EntryElemnet) GetObj() (interface{}, error)
func (*EntryElemnet) Index ¶
func (ele *EntryElemnet) Index() uint64
type EntryIterator ¶
type EntryIterator struct {
// contains filtered or unexported fields
}
func (*EntryIterator) HasNext ¶
func (it *EntryIterator) HasNext() bool
func (*EntryIterator) HasNextN ¶
func (it *EntryIterator) HasNextN(n int) bool
func (*EntryIterator) HasPre ¶
func (it *EntryIterator) HasPre() bool
func (*EntryIterator) HasPreN ¶
func (it *EntryIterator) HasPreN(n int) bool
func (*EntryIterator) Next ¶
func (it *EntryIterator) Next() *EntryElemnet
func (*EntryIterator) NextN ¶
func (it *EntryIterator) NextN(n int) *EntryElemnet
func (*EntryIterator) Previous ¶
func (it *EntryIterator) Previous() *EntryElemnet
func (*EntryIterator) PreviousN ¶
func (it *EntryIterator) PreviousN(n int) *EntryElemnet
func (*EntryIterator) Release ¶
func (it *EntryIterator) Release()
func (*EntryIterator) SkipToFirst ¶
func (it *EntryIterator) SkipToFirst()
func (*EntryIterator) SkipToLast ¶
func (it *EntryIterator) SkipToLast()
type FileLock ¶
type FileLock struct {
// contains filtered or unexported fields
}
FileLock Used to exclusively lock a file
func NewFileLocker ¶
type FlushStrategy ¶
type FlushStrategy int
type Lws ¶
type Lws struct {
// contains filtered or unexported fields
}
func Open ¶
@title: Open @description: open a new lws instance @param {string} path 日志文件存放路径 @param {...Opt} opt 打开日志写入系统的参数配置 @return {*Lws} 日志写入系统实例句柄 @return {error} 错误信息
func OpenWithDSL ¶
@title: OpenWithDSL @description: open a new lws instance with struct dsl @param {*dsl.DSL} 数据存储定位结构,其中包括协议及路径 @param {...Opt} opt 打开日志写入系统的参数配置 @return {*Lws} 日志写入系统实例句柄 @return {error} 错误信息
func (*Lws) NewLogIterator ¶
func (l *Lws) NewLogIterator() *EntryIterator
@title: NewLogIterator @description: 对日志写入系统的当前状态生成日志条目迭代器 @return {*EntryIterator} 日志条目迭代器
func (*Lws) Purge ¶
@title: Purge @description: 根据配置的清理策略对日志文件进行清理 @param {PurgeMod} mod: 0异步清理 1:同步清理 @return {error} 错误信息
func (*Lws) ReadFromFile ¶
func (l *Lws) ReadFromFile(file string) (*EntryIterator, error)
func (*Lws) RegisterCoder ¶
func (*Lws) UnregisterCoder ¶
func (*Lws) Write ¶
@title: Write @description: 将obj对象写入文件 @param {int8} typ 写入的数据类型 @param {interface{}} obj 数据 @return {error} 成功返回nil,错误返回错误详情
func (*Lws) WriteBytes ¶
@title: WriteBytes @description: 将字节流写入文件 @param {[]byte} data 数据 @return {error} 成功返回entry的索引值&nil, 失败返回0&err
func (*Lws) WriteRetIndex ¶
@title: WriteRetIndex @description: 将obj对象写入文件 @param {int8} typ 写入的数据类型 @param {interface{}} obj 数据 @return {error} 成功返回entry的索引值&nil, 失败返回0&err
type Opt ¶
type Opt func(*Options)
func WithBufferSize ¶
func WithEntryLimitForPurge ¶
func WithFileExtension ¶
func WithFileLimitForPurge ¶
func WithFilePrex ¶
func WithMmapFileLock ¶
func WithMmapFileLock() Opt
func WithSegmentSize ¶
func WithWriteFileType ¶
func WithWriteFlag ¶
type Options ¶
type Options struct { Wf WriteFlag //写日志标识 FlushQuota int //刷盘限定值 SegmentSize int64 //文件的大小限制 默认64M 代表不限制 Ft FileType //文件类型(1 普通文件 2 mmap) 默认1 MmapFileLock bool //文件映射的时候,是否锁定内存以提高write速度 BufferSize int LogFileLimitForPurge int //存在日志文件限制 LogEntryCountLimitForPurge int //存在日志条目限制 FilePrefix string FileExtension string }
type PurgeOpt ¶
type PurgeOpt func(*PurgeOptions)
func PurgeWithAsync ¶
func PurgeWithAsync() PurgeOpt
func PurgeWithKeepFiles ¶
func PurgeWithSoftEntries ¶
type PurgeOptions ¶
type PurgeOptions struct {
// contains filtered or unexported fields
}
type ReaderCache ¶
type ReaderCache struct {
// contains filtered or unexported fields
}
ReaderCache reader缓存器
func (*ReaderCache) CleanReader ¶
func (rc *ReaderCache) CleanReader()
func (*ReaderCache) DeleteReader ¶
func (rc *ReaderCache) DeleteReader(segmentID uint64) *refReader
func (*ReaderCache) GetAndNewReader ¶
func (rc *ReaderCache) GetAndNewReader(segmentID uint64, new func() (*refReader, error)) (*refReader, error)
GetAndNewReader 通过段ID获取reader,如果reader不存在,则通过new函数创建并添加到缓存中
func (*ReaderCache) GetReader ¶
func (rc *ReaderCache) GetReader(segmentID uint64) *refReader
GetReader 通过段ID获取reader,不存在则返回nil
func (*ReaderCache) PutReader ¶
func (rc *ReaderCache) PutReader(segmentID uint64, rr *refReader)
type SegmentGroup ¶
type SegmentGroup []*Segment
func (*SegmentGroup) Assign ¶
func (sg *SegmentGroup) Assign(i int, s *Segment)
Assign 将索引i指定的值由s重新赋值
func (*SegmentGroup) Cap ¶
func (sg *SegmentGroup) Cap() int
func (*SegmentGroup) FindAt ¶
func (sg *SegmentGroup) FindAt(idx uint64) *Segment
FindAt 通过二分查找,找到idx所在的sgement信息
func (*SegmentGroup) First ¶
func (sg *SegmentGroup) First() *Segment
func (*SegmentGroup) ForEach ¶
func (sg *SegmentGroup) ForEach(fn func(i int, s *Segment) bool)
ForEach 遍历SegmentGroup所有元素,并调用fn,fn返回true标识遍历终止
func (*SegmentGroup) Last ¶
func (sg *SegmentGroup) Last() *Segment
func (*SegmentGroup) Len ¶
func (sg *SegmentGroup) Len() int
func (*SegmentGroup) Reserved ¶
func (sg *SegmentGroup) Reserved(n int)
Reserved 预留,会影响SegmentGroup的cap大小
func (*SegmentGroup) Resize ¶
func (sg *SegmentGroup) Resize(n int)
Resize 预分配,会影响SegmentGroup的len大小
func (*SegmentGroup) Split ¶
func (sg *SegmentGroup) Split(i int) (SegmentGroup, SegmentGroup)
Split 分割,将SegmentGroup分割成[0,i),[i:len)两部分,如果i大于len,则返回[0,len), nil
type SegmentProcessor ¶
type SegmentProcessor struct {
// contains filtered or unexported fields
}
func (*SegmentProcessor) Close ¶
func (sp *SegmentProcessor) Close() error
type SegmentReader ¶
type SegmentReader struct { *SegmentProcessor // contains filtered or unexported fields }
func NewSegmentReader ¶
func NewSegmentReader(s *Segment, ft FileType) (*SegmentReader, error)
func (*SegmentReader) FirstIndex ¶
func (sr *SegmentReader) FirstIndex() uint64
FirstIndex 此文件段条目的起始索引
func (*SegmentReader) ReadLogByIndex ¶
func (sr *SegmentReader) ReadLogByIndex(index uint64) (*LogEntry, error)
ReadLogByIndex 通过index获取到指定的日志条目
type SegmentWriter ¶
type SegmentWriter struct { *SegmentProcessor // contains filtered or unexported fields }
func NewSegmentWriter ¶
func NewSegmentWriter(s *Segment, opt WriterOptions) (*SegmentWriter, error)
func (*SegmentWriter) Close ¶
func (sw *SegmentWriter) Close() error
func (*SegmentWriter) EntryCount ¶
func (sw *SegmentWriter) EntryCount() int
EntryCount 返回当前文件写入的总条目数
func (*SegmentWriter) Flush ¶
func (sw *SegmentWriter) Flush() error
Flush 如果用户没有指定同步写文件操作,则需要将缓存数据回写到文件,再进行刷盘
func (*SegmentWriter) Replace ¶
func (sw *SegmentWriter) Replace(s *Segment) error
Replace 根据s信息替换写入的文件,即文件切换 切换前会将老数据进行刷盘,并将文件大小调整到实际写入大小,然后打开一个新的文件,并替换老文件,如果打开出错,则保持老文件
func (*SegmentWriter) Size ¶
func (sw *SegmentWriter) Size() int64
Size 获取文件当前的写入的大小,因为writer会预分配文件大小,所以使用write offset标识写入的大小值