aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/azure/azure.go6
-rw-r--r--plugin/clouddns/clouddns.go6
-rw-r--r--plugin/dnstap/io.go7
-rw-r--r--plugin/kubernetes/kubernetes.go20
-rw-r--r--plugin/route53/route53.go5
5 files changed, 31 insertions, 13 deletions
diff --git a/plugin/azure/azure.go b/plugin/azure/azure.go
index 6b4aba0cc..ed83a0af7 100644
--- a/plugin/azure/azure.go
+++ b/plugin/azure/azure.go
@@ -84,12 +84,16 @@ func (h *Azure) Run(ctx context.Context) error {
return err
}
go func() {
+ delay := 1 * time.Minute
+ timer := time.NewTimer(delay)
+ defer timer.Stop()
for {
+ timer.Reset(delay)
select {
case <-ctx.Done():
log.Debugf("Breaking out of Azure update loop for %v: %v", h.zoneNames, ctx.Err())
return
- case <-time.After(1 * time.Minute):
+ case <-timer.C:
if err := h.updateZones(ctx); err != nil && ctx.Err() == nil {
log.Errorf("Failed to update zones %v: %v", h.zoneNames, err)
}
diff --git a/plugin/clouddns/clouddns.go b/plugin/clouddns/clouddns.go
index 371832440..4556ecac6 100644
--- a/plugin/clouddns/clouddns.go
+++ b/plugin/clouddns/clouddns.go
@@ -82,12 +82,16 @@ func (h *CloudDNS) Run(ctx context.Context) error {
return err
}
go func() {
+ delay := 1 * time.Minute
+ timer := time.NewTimer(delay)
+ defer timer.Stop()
for {
+ timer.Reset(delay)
select {
case <-ctx.Done():
log.Debugf("Breaking out of CloudDNS update loop for %v: %v", h.zoneNames, ctx.Err())
return
- case <-time.After(1 * time.Minute):
+ case <-timer.C:
if err := h.updateZones(ctx); err != nil && ctx.Err() == nil /* Don't log error if ctx expired. */ {
log.Errorf("Failed to update zones %v: %v", h.zoneNames, err)
}
diff --git a/plugin/dnstap/io.go b/plugin/dnstap/io.go
index 6823fa8a6..6b8c9bebe 100644
--- a/plugin/dnstap/io.go
+++ b/plugin/dnstap/io.go
@@ -92,8 +92,10 @@ func (d *dio) write(payload *tap.Dnstap) error {
}
func (d *dio) serve() {
- timeout := time.After(d.flushTimeout)
+ timeout := time.NewTimer(d.flushTimeout)
+ defer timeout.Stop()
for {
+ timeout.Reset(d.flushTimeout)
select {
case <-d.quit:
if d.enc == nil {
@@ -106,7 +108,7 @@ func (d *dio) serve() {
if err := d.write(&payload); err != nil {
d.dial()
}
- case <-timeout:
+ case <-timeout.C:
if dropped := atomic.SwapUint32(&d.dropped, 0); dropped > 0 {
log.Warningf("Dropped dnstap messages: %d", dropped)
}
@@ -115,7 +117,6 @@ func (d *dio) serve() {
} else {
d.enc.flush()
}
- timeout = time.After(d.flushTimeout)
}
}
}
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index cf52ae41b..10bf29938 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -275,19 +275,25 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (onStart func() error, o
k.APIConn.Run()
}()
- timeout := time.After(5 * time.Second)
- logWaiting := time.After(500 * time.Millisecond)
- ticker := time.NewTicker(100 * time.Millisecond)
- defer ticker.Stop()
+ timeout := 5 * time.Second
+ timeoutTicker := time.NewTicker(timeout)
+ defer timeoutTicker.Stop()
+ logDelay := 500 * time.Millisecond
+ logTicker := time.NewTicker(logDelay)
+ defer logTicker.Stop()
+ checkSyncTicker := time.NewTicker(100 * time.Millisecond)
+ defer checkSyncTicker.Stop()
for {
+ timeoutTicker.Reset(timeout)
+ logTicker.Reset(logDelay)
select {
- case <-ticker.C:
+ case <-checkSyncTicker.C:
if k.APIConn.HasSynced() {
return nil
}
- case <-logWaiting:
+ case <-logTicker.C:
log.Info("waiting for Kubernetes API before starting server")
- case <-timeout:
+ case <-timeoutTicker.C:
log.Warning("starting server with unsynced Kubernetes API")
return nil
}
diff --git a/plugin/route53/route53.go b/plugin/route53/route53.go
index 930acc6d3..72cb74e8f 100644
--- a/plugin/route53/route53.go
+++ b/plugin/route53/route53.go
@@ -84,12 +84,15 @@ func (h *Route53) Run(ctx context.Context) error {
return err
}
go func() {
+ timer := time.NewTimer(h.refresh)
+ defer timer.Stop()
for {
+ timer.Reset(h.refresh)
select {
case <-ctx.Done():
log.Debugf("Breaking out of Route53 update loop for %v: %v", h.zoneNames, ctx.Err())
return
- case <-time.After(h.refresh):
+ case <-timer.C:
if err := h.updateZones(ctx); err != nil && ctx.Err() == nil /* Don't log error if ctx expired. */ {
log.Errorf("Failed to update zones %v: %v", h.zoneNames, err)
}