aboutsummaryrefslogtreecommitdiff
path: root/plugin/file/setup.go
diff options
context:
space:
mode:
authorGravatar Yong Tang <yong.tang.github@outlook.com> 2020-09-24 11:30:39 -0700
committerGravatar GitHub <noreply@github.com> 2020-09-24 20:30:39 +0200
commit9798dd067f53a74e3777cff539b2f01617c107c6 (patch)
treefac3bbc495c9a7f78fd9a847fb44533bd6367d9a /plugin/file/setup.go
parent279194f2e45c9dfeccafe95e515e0aced0ea8bdc (diff)
downloadcoredns-9798dd067f53a74e3777cff539b2f01617c107c6.tar.gz
coredns-9798dd067f53a74e3777cff539b2f01617c107c6.tar.zst
coredns-9798dd067f53a74e3777cff539b2f01617c107c6.zip
Cherry-pick: Implement notifies for transfer plugin (#3972) (#4142)
* Implement notifies for transfer plugin (#3972) * Fix notifies in transfer plugin Signed-off-by: Miek Gieben <miek@miek.nl> * Make it compile Signed-off-by: Miek Gieben <miek@miek.nl> * Port more plugins Signed-off-by: Miek Gieben <miek@miek.nl> * golint Signed-off-by: Miek Gieben <miek@miek.nl> * Fix tests Signed-off-by: Miek Gieben <miek@miek.nl> * Fix notifies in transfer plugin Signed-off-by: Miek Gieben <miek@miek.nl> * Make it compile Signed-off-by: Miek Gieben <miek@miek.nl> * Port more plugins Signed-off-by: Miek Gieben <miek@miek.nl> * golint Signed-off-by: Miek Gieben <miek@miek.nl> * Fix tests Signed-off-by: Miek Gieben <miek@miek.nl> * Fix tests Signed-off-by: Miek Gieben <miek@miek.nl> * really fix test Signed-off-by: Miek Gieben <miek@miek.nl> * Implement ixfr fallback and unify file and auto for transfering Signed-off-by: Miek Gieben <miek@miek.nl> * Add transfer tests copied and modified from #3452 Signed-off-by: Miek Gieben <miek@miek.nl> * Test correct selection of plugin Signed-off-by: Miek Gieben <miek@miek.nl> * add upstream back in Signed-off-by: Miek Gieben <miek@miek.nl> * Implement ixfr fallback and unify file and auto for transfering Signed-off-by: Miek Gieben <miek@miek.nl> * fix test Signed-off-by: Miek Gieben <miek@miek.nl> * properly merge Signed-off-by: Miek Gieben <miek@miek.nl> * Remove plugin/kubernetes/setup_transfer_test.go Signed-off-by: Yong Tang <yong.tang.github@outlook.com> Co-authored-by: Miek Gieben <miek@miek.nl>
Diffstat (limited to 'plugin/file/setup.go')
-rw-r--r--plugin/file/setup.go59
1 files changed, 30 insertions, 29 deletions
diff --git a/plugin/file/setup.go b/plugin/file/setup.go
index c1dc853d6..ed19aedfe 100644
--- a/plugin/file/setup.go
+++ b/plugin/file/setup.go
@@ -8,8 +8,8 @@ import (
"github.com/coredns/caddy"
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
- "github.com/coredns/coredns/plugin/pkg/parse"
"github.com/coredns/coredns/plugin/pkg/upstream"
+ "github.com/coredns/coredns/plugin/transfer"
)
func init() { plugin.Register("file", setup) }
@@ -20,26 +20,43 @@ func setup(c *caddy.Controller) error {
return plugin.Error("file", err)
}
- // Add startup functions to notify the master(s).
+ f := File{Zones: zones}
+ // get the transfer plugin, so we can send notifies and send notifies on startup as well.
+ c.OnStartup(func() error {
+ t := dnsserver.GetConfig(c).Handler("transfer")
+ if t == nil {
+ return nil
+ }
+ f.transfer = t.(*transfer.Transfer) // if found this must be OK.
+ for _, n := range zones.Names {
+ f.transfer.Notify(n)
+ }
+ return nil
+ })
+
+ c.OnRestartFailed(func() error {
+ t := dnsserver.GetConfig(c).Handler("transfer")
+ if t == nil {
+ return nil
+ }
+ for _, n := range zones.Names {
+ f.transfer.Notify(n)
+ }
+ return nil
+ })
+
for _, n := range zones.Names {
z := zones.Z[n]
+ c.OnShutdown(z.OnShutdown)
c.OnStartup(func() error {
- z.StartupOnce.Do(func() {
- if len(z.TransferTo) > 0 {
- z.Notify()
- }
- z.Reload()
- })
+ z.StartupOnce.Do(func() { z.Reload(f.transfer) })
return nil
})
}
- for _, n := range zones.Names {
- z := zones.Z[n]
- c.OnShutdown(z.OnShutdown)
- }
dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
- return File{Next: next, Zones: zones}
+ f.Next = next
+ return f
})
return nil
@@ -92,24 +109,14 @@ func fileParse(c *caddy.Controller) (Zones, error) {
names = append(names, origins[i])
}
- t := []string{}
- var e error
-
for c.NextBlock() {
switch c.Val() {
- case "transfer":
- t, _, e = parse.Transfer(c, false)
- if e != nil {
- return Zones{}, e
- }
-
case "reload":
d, err := time.ParseDuration(c.RemainingArgs()[0])
if err != nil {
return Zones{}, plugin.Error("file", err)
}
reload = d
-
case "upstream":
// remove soon
c.RemainingArgs()
@@ -117,12 +124,6 @@ func fileParse(c *caddy.Controller) (Zones, error) {
default:
return Zones{}, c.Errf("unknown property '%s'", c.Val())
}
-
- for _, origin := range origins {
- if t != nil {
- z[origin].TransferTo = append(z[origin].TransferTo, t...)
- }
- }
}
}