aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-04-11 21:49:35 +0700
committerShulhan <ms@kilabit.info>2022-04-11 21:49:35 +0700
commitc60cd24822081c45c3b2da25e4a708d2a58e2a87 (patch)
tree6828310948055a5eb45f2e3a7f08fd1cdf3f7ce1
parent36b08fedd100b0cf32551e171542b164084fcb28 (diff)
downloadrescached-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.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)
+ }
}
}