Documentation
¶
Index ¶
- Variables
- func GroupCheckDuration(duration time.Duration) func(*Group)
- func GroupHeadSizeLimit(limit int64) func(*Group)
- func GroupTotalSizeLimit(limit int64) func(*Group)
- type AutoFile
- type Group
- func (g *Group) Buffered() int
- func (g *Group) Close()
- func (g *Group) FlushAndSync() error
- func (g *Group) HeadSizeLimit() int64
- func (g *Group) MaxIndex() int
- func (g *Group) MinIndex() int
- func (g *Group) NewReader(index int) (*GroupReader, error)
- func (g *Group) OnStart(ctx context.Context) error
- func (g *Group) OnStop()
- func (g *Group) ReadGroupInfo() GroupInfo
- func (g *Group) TotalSizeLimit() int64
- func (g *Group) Wait()
- func (g *Group) WaitForGoroutines()
- func (g *Group) Write(p []byte) (nn int, err error)
- func (g *Group) WriteLine(line string) error
- type GroupInfo
- type GroupReader
Constants ¶
This section is empty.
Variables ¶
var ErrAutoFileClosed = errors.New("autofile is closed")
ErrAutoFileClosed is reported when operations attempt to use an autofile after it has been closed.
Functions ¶
func GroupCheckDuration ¶
GroupCheckDuration allows you to overwrite default groupCheckDuration.
func GroupHeadSizeLimit ¶
GroupHeadSizeLimit allows you to overwrite default head size limit - 10MB.
func GroupTotalSizeLimit ¶
GroupTotalSizeLimit allows you to overwrite default total size limit of the group - 1GB.
Types ¶
type AutoFile ¶
AutoFile automatically closes and re-opens file for writing. The file is automatically setup to close itself every 1s and upon receiving SIGHUP.
This is useful for using a log file with the logrotate tool.
func OpenAutoFile ¶
OpenAutoFile creates an AutoFile in the path (with random ID). If there is an error, it will be of type *PathError or *ErrPermissionsChanged (if file's permissions got changed (should be 0600)).
func (*AutoFile) Close ¶
Close shuts down the service goroutine and marks af as invalid. Operations on af after Close will report an error.
func (*AutoFile) Size ¶
Size returns the size of the AutoFile. It returns -1 and an error if fails get stats or open file. Opens AutoFile if needed.
type Group ¶
type Group struct {
service.BaseService
ID string
Head *AutoFile // The head AutoFile to write to
Dir string // Directory that contains .Head
// contains filtered or unexported fields
}
You can open a Group to keep restrictions on an AutoFile, like the maximum size of each chunk, and/or the total amount of bytes stored in the group.
The first file to be written in the Group.Dir is the head file.
Dir/ - <HeadPath>
Once the Head file reaches the size limit, it will be rotated.
Dir/ - <HeadPath>.000 // First rolled file - <HeadPath> // New head path, starts empty. // The implicit index is 001.
As more files are written, the index numbers grow...
Dir/ - <HeadPath>.000 // First rolled file - <HeadPath>.001 // Second rolled file - ... - <HeadPath> // New head path
The Group can also be used to binary-search for some line, assuming that marker lines are written occasionally.
func OpenGroup ¶
func OpenGroup(ctx context.Context, logger log.Logger, headPath string, groupOptions ...func(*Group)) (*Group, error)
OpenGroup creates a new Group with head at headPath. It returns an error if it fails to open head file.
func (*Group) Close ¶
func (g *Group) Close()
Close closes the head file. The group must be stopped by this moment.
func (*Group) FlushAndSync ¶
FlushAndSync writes any buffered data to the underlying file and commits the current content of the file to stable storage (fsync).
func (*Group) HeadSizeLimit ¶
HeadSizeLimit returns the current head size limit.
func (*Group) NewReader ¶
func (g *Group) NewReader(index int) (*GroupReader, error)
NewReader returns a new group reader. CONTRACT: Caller must close the returned GroupReader.
func (*Group) OnStart ¶
OnStart implements service.Service by starting the goroutine that checks file and group limits.
func (*Group) OnStop ¶
func (g *Group) OnStop()
OnStop implements service.Service by stopping the goroutine described above. NOTE: g.Head must be closed separately using Close.
func (*Group) ReadGroupInfo ¶
Returns info after scanning all files in g.Head's dir.
func (*Group) TotalSizeLimit ¶
TotalSizeLimit returns total size limit of the group.
func (*Group) Wait ¶ added in v1.6.0
func (g *Group) Wait()
Wait blocks until the Group service has stopped and its background goroutines have fully exited. It overrides BaseService.Wait — which returns as soon as OnStop() closes the quit channel, before the procCancel-driven processTicks goroutine is joined — so that every direct Group consumer gets the same shutdown guarantee BaseWAL.Wait relies on, not just callers that remember to chain WaitForGoroutines explicitly.
It calls g.BaseService.Wait() (the embedded method), not g.Wait(), so there is no recursion. WaitForGoroutines is idempotent, so chaining it here on top of an explicit caller call is harmless.
func (*Group) WaitForGoroutines ¶ added in v1.6.0
func (g *Group) WaitForGoroutines()
WaitForGoroutines blocks until the background goroutines started by this Group (e.g. processTicks) have fully exited. It is safe to call after Stop() because OnStop() cancels the goroutine's context via procCancel.
func (*Group) Write ¶
Write writes the contents of p into the current head of the group. It returns the number of bytes written. If nn < len(p), it also returns an error explaining why the write is short. NOTE: Writes are buffered so they don't write synchronously TODO: Make it halt if space is unavailable
type GroupInfo ¶
type GroupInfo struct {
MinIndex int // index of the first file in the group, including head
MaxIndex int // index of the last file in the group, including head
TotalSize int64 // total size of the group
HeadSize int64 // size of the head
}
GroupInfo holds information about the group.
type GroupReader ¶
type GroupReader struct {
*Group
// contains filtered or unexported fields
}
GroupReader provides an interface for reading from a Group.
func (*GroupReader) Close ¶
func (gr *GroupReader) Close() error
Close closes the GroupReader by closing the cursor file.
func (*GroupReader) CurIndex ¶
func (gr *GroupReader) CurIndex() int
CurIndex returns cursor's file index.
func (*GroupReader) Read ¶
func (gr *GroupReader) Read(p []byte) (n int, err error)
Read implements io.Reader, reading bytes from the current Reader incrementing index until enough bytes are read.
func (*GroupReader) SetIndex ¶
func (gr *GroupReader) SetIndex(index int) error
SetIndex sets the cursor's file index to index by opening a file at this position.