diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a358a4bd..efd0c9e14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ BREAKING: +## 0.8.4 + +*June 5, 2018* + +IMPROVEMENTS: + + - [autofile] Flush on Stop; Close() method to Flush and close file + ## 0.8.3 *May 21, 2018* diff --git a/autofile/group.go b/autofile/group.go index 652c33310..1ae545032 100644 --- a/autofile/group.go +++ b/autofile/group.go @@ -71,8 +71,9 @@ type Group struct { // and their dependencies. } +// OpenGroup creates a new Group with head at headPath. It returns an error if +// it fails to open head file. func OpenGroup(headPath string) (g *Group, err error) { - dir := path.Dir(headPath) head, err := OpenAutoFile(headPath) if err != nil { @@ -98,16 +99,27 @@ func OpenGroup(headPath string) (g *Group, err error) { return } +// OnStart implements Service by starting the goroutine that checks file and +// group limits. func (g *Group) OnStart() error { - g.BaseService.OnStart() go g.processTicks() return nil } -// NOTE: g.Head must be closed separately +// OnStop implements Service by stopping the goroutine described above. +// NOTE: g.Head must be closed separately using Close. func (g *Group) OnStop() { - g.BaseService.OnStop() g.ticker.Stop() + g.Flush() // flush any uncommitted data +} + +// Close closes the head file. The group must be stopped by this moment. +func (g *Group) Close() { + g.Flush() // flush any uncommitted data + + g.mtx.Lock() + _ = g.Head.closeFile() + g.mtx.Unlock() } // SetHeadSizeLimit allows you to overwrite default head size limit - 10MB.