diff options
| -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) + } } } |
