diff options
| author | Shulhan <ms@kilabit.info> | 2022-04-11 21:49:35 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-04-11 21:49:35 +0700 |
| commit | c60cd24822081c45c3b2da25e4a708d2a58e2a87 (patch) | |
| tree | 6828310948055a5eb45f2e3a7f08fd1cdf3f7ce1 | |
| parent | 36b08fedd100b0cf32551e171542b164084fcb28 (diff) | |
| download | rescached-c60cd24822081c45c3b2da25e4a708d2a58e2a87.tar.xz | |
go.mod: update to latest share the module
The latest share module move the Watcher and DirWatcher from package io
to package memfs, also it simplify watching files on existing MemFS
instance using method Watch.
| -rw-r--r-- | cmd/rescached/main.go | 58 | ||||
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | go.sum | 4 | ||||
| -rw-r--r-- | rescached.go | 55 |
4 files changed, 57 insertions, 62 deletions
diff --git a/cmd/rescached/main.go b/cmd/rescached/main.go index 751fa7e..e2dbb84 100644 --- a/cmd/rescached/main.go +++ b/cmd/rescached/main.go @@ -13,9 +13,7 @@ import ( "time" "github.com/shuLhan/share/lib/debug" - libio "github.com/shuLhan/share/lib/io" "github.com/shuLhan/share/lib/memfs" - "github.com/shuLhan/share/lib/mlog" "github.com/shuLhan/rescached-go/v4" ) @@ -104,50 +102,36 @@ func debugRuntime() { // func watchWww(env *rescached.Environment, running chan bool) { var ( - logp = "watchWww" - changeq = make(chan *libio.NodeState, 64) - dw = libio.DirWatcher{ - Options: *env.HttpdOptions.Memfs.Opts, - Callback: func(ns *libio.NodeState) { - changeq <- ns - }, - } - node *memfs.Node - nChanges int - err error - isRunning bool = true - ) + logp = "watchWww" + tick = time.NewTicker(5 * time.Second) + isRunning = true - dw.Start() + dw *memfs.DirWatcher + nChanges int + err error + ) - tick := time.NewTicker(5 * time.Second) + dw, err = env.HttpdOptions.Memfs.Watch(memfs.WatchOptions{}) + if err != nil { + log.Fatalf("%s: %s", logp, err) + } for isRunning { select { - case ns := <-changeq: - node, err = env.HttpdOptions.Memfs.Get(ns.Node.Path) - if err != nil { - log.Printf("%s: %q: %s", logp, ns.Node.Path, err) + case <-dw.C: + nChanges++ + + case <-tick.C: + if nChanges == 0 { continue } - if node != nil { - err = node.Update(nil, 0) - if err != nil { - mlog.Errf("%s: %q: %s", logp, node.Path, err) - continue - } - nChanges++ - } - case <-tick.C: - if nChanges > 0 { - fmt.Printf("--- %d changes\n", nChanges) - err = env.HttpdOptions.Memfs.GoEmbed() - if err != nil { - log.Printf("%s", err) - } - nChanges = 0 + fmt.Printf("--- %d changes\n", nChanges) + err = env.HttpdOptions.Memfs.GoEmbed() + if err != nil { + log.Printf("%s", err) } + nChanges = 0 case <-running: isRunning = false @@ -5,6 +5,6 @@ module github.com/shuLhan/rescached-go/v4 go 1.16 -require github.com/shuLhan/share v0.35.0 +require github.com/shuLhan/share v0.36.1-0.20220405193722-429a9d9205ba //replace github.com/shuLhan/share => ../share @@ -1,5 +1,5 @@ -github.com/shuLhan/share v0.35.0 h1:dS6q3rBvCLWfUinjpzpzkyZWP8vaXVYiJ5gQQw4SrHk= -github.com/shuLhan/share v0.35.0/go.mod h1:laKGR1DNboj8+INRIC9VFYRiVEu/IIjrLurUmTHXkw0= +github.com/shuLhan/share v0.36.1-0.20220405193722-429a9d9205ba h1:zc9/aydsu8QdNfdf/ESk7EgsP7zvzlOrVruQdX0uH4o= +github.com/shuLhan/share v0.36.1-0.20220405193722-429a9d9205ba/go.mod h1:laKGR1DNboj8+INRIC9VFYRiVEu/IIjrLurUmTHXkw0= golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= diff --git a/rescached.go b/rescached.go index ba163b6..232d340 100644 --- a/rescached.go +++ b/rescached.go @@ -15,7 +15,7 @@ import ( "github.com/shuLhan/share/lib/debug" "github.com/shuLhan/share/lib/dns" "github.com/shuLhan/share/lib/http" - libio "github.com/shuLhan/share/lib/io" + "github.com/shuLhan/share/lib/memfs" ) const ( @@ -27,7 +27,7 @@ const ( type Server struct { dns *dns.Server env *Environment - rcWatcher *libio.Watcher + rcWatcher *memfs.Watcher httpd *http.Server httpdRunner sync.Once @@ -128,11 +128,7 @@ func (srv *Server) Start() (err error) { } if len(srv.env.FileResolvConf) > 0 { - srv.rcWatcher, err = libio.NewWatcher( - srv.env.FileResolvConf, 0, srv.watchResolvConf) - if err != nil { - log.Fatal("Start:", err) - } + go srv.watchResolvConf() } go func() { @@ -194,21 +190,36 @@ func (srv *Server) Stop() { fmt.Printf("%s: %d caches stored to %s\n", logp, n, cachesPath) } -func (srv *Server) watchResolvConf(ns *libio.NodeState) { - switch ns.State { - case libio.FileStateDeleted: - log.Printf("= ResolvConf: file %q deleted\n", srv.env.FileResolvConf) - return - default: - ok, err := srv.env.loadResolvConf() - if err != nil { - log.Println("loadResolvConf: " + err.Error()) - break - } - if !ok { - break - } +// watchResolvConf watch an update to file resolv.conf. +func (srv *Server) watchResolvConf() { + var ( + logp = "watchResolvConf" - srv.dns.RestartForwarders(srv.env.NameServers) + ns memfs.NodeState + err error + ) + + srv.rcWatcher, err = memfs.NewWatcher(srv.env.FileResolvConf, 0) + if err != nil { + log.Fatalf("%s: %s", logp, err) + } + + for ns = range srv.rcWatcher.C { + switch ns.State { + case memfs.FileStateDeleted: + log.Printf("= %s: file %q deleted\n", logp, srv.env.FileResolvConf) + return + default: + ok, err := srv.env.loadResolvConf() + if err != nil { + log.Printf("%s: %s", logp, err) + break + } + if !ok { + break + } + + srv.dns.RestartForwarders(srv.env.NameServers) + } } } |
