From: Sergey Matveev Date: Sat, 11 Mar 2023 19:44:33 +0000 (+0300) Subject: fsnotify optimisation X-Git-Url: http://www.git.stargrave.org/?p=mmc.git;a=commitdiff_plain;h=e011d6f52f2e39006d8a4398ff846f4951b8290c fsnotify optimisation --- diff --git a/cmd/mmc/main.go b/cmd/mmc/main.go index 85cb759..99e9f3a 100644 --- a/cmd/mmc/main.go +++ b/cmd/mmc/main.go @@ -197,7 +197,6 @@ func main() { go func(u *model.User) { var dc *model.Channel for { - time.Sleep(mmc.SleepTime) fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666)) if err != nil { continue @@ -310,7 +309,6 @@ func main() { } go func(ch *model.Channel) { for { - time.Sleep(mmc.SleepTime) fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666)) if err != nil { continue diff --git a/cmd/rd/main.go b/cmd/rd/main.go index 4bb8b24..0d7e70b 100644 --- a/cmd/rd/main.go +++ b/cmd/rd/main.go @@ -23,8 +23,8 @@ import ( "log" "os" "path" - "time" + "github.com/fsnotify/fsnotify" "github.com/mattermost/mattermost-server/v6/model" "go.cypherpunks.ru/recfile" "go.stargrave.org/mmc" @@ -84,16 +84,22 @@ func main() { for _, m := range ms { printPost(m) } - fi, err := fd.Stat() + + watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatalln(err) } - size := fi.Size() + if err = watcher.Add(pth); err != nil { + log.Fatalln(err) + } for { - time.Sleep(mmc.SleepTime) - fi, err = os.Stat(pth) - if fi.Size() == size { - continue + select { + case err = <-watcher.Errors: + log.Fatalln(err) + case event := <-watcher.Events: + if !event.Has(fsnotify.Write) { + continue + } } unlock, err = mmc.Lock(lockPth) if err != nil { @@ -110,7 +116,6 @@ func main() { } printPost(m) } - size = fi.Size() unlock() } } diff --git a/go.mod b/go.mod index 0814771..59f35f0 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.20 require ( github.com/davecgh/go-spew v1.1.1 + github.com/fsnotify/fsnotify v1.6.0 github.com/mattermost/mattermost-server/v6 v6.7.2 go.cypherpunks.ru/recfile v0.5.1 golang.org/x/sys v0.6.0 diff --git a/go.sum b/go.sum index 2fd506e..092d7ff 100644 --- a/go.sum +++ b/go.sum @@ -435,6 +435,8 @@ github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/gabriel-vasile/mimetype v1.3.1/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= @@ -1697,6 +1699,7 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220403205710-6acee93ad0eb/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/lock.go b/lock.go index e1a4b40..271b39c 100644 --- a/lock.go +++ b/lock.go @@ -37,7 +37,7 @@ func Lock(what string) (func(), error) { Type: unix.F_WRLCK, Whence: io.SeekStart, } - if err = unix.FcntlFlock(fd.Fd(), unix.F_SETLK, &flock); err != nil { + if err = unix.FcntlFlock(fd.Fd(), unix.F_SETLKW, &flock); err != nil { fd.Close() return dummy, err }