aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/rescached/main.go58
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--rescached.go55
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
diff --git a/go.mod b/go.mod
index 7429f5f..3d36d22 100644
--- a/go.mod
+++ b/go.mod
@@ -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
diff --git a/go.sum b/go.sum
index 6bbb083..b57298b 100644
--- a/go.sum
+++ b/go.sum
@@ -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)
+ }
}
}