From 537085d94c92ed60c5a98428937912b39b5b111f Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sun, 8 Jan 2017 14:48:58 -0500 Subject: [PATCH] dns-controller: don't make spurious updates in buffer These will be caught later anyway, but we can save a false invalidation and a spurious log message. --- dns-controller/cmd/dns-controller/main.go | 4 ++-- dns-controller/pkg/dns/dnscontroller.go | 29 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/dns-controller/cmd/dns-controller/main.go b/dns-controller/cmd/dns-controller/main.go index dd9bd48840..7001766cb5 100644 --- a/dns-controller/cmd/dns-controller/main.go +++ b/dns-controller/cmd/dns-controller/main.go @@ -23,8 +23,8 @@ import ( "k8s.io/kops/dns-controller/pkg/dns" "k8s.io/kops/dns-controller/pkg/watchers" "k8s.io/kubernetes/federation/pkg/dnsprovider" - client "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/core/v1" - client_extensions "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/extensions/v1beta1" + client "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" + client_extensions "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/extensions/v1beta1" kubectl_util "k8s.io/kubernetes/pkg/kubectl/cmd/util" "os" diff --git a/dns-controller/pkg/dns/dnscontroller.go b/dns-controller/pkg/dns/dnscontroller.go index d4d6097c73..0ea4bba8cb 100644 --- a/dns-controller/pkg/dns/dnscontroller.go +++ b/dns-controller/pkg/dns/dnscontroller.go @@ -480,19 +480,44 @@ func (s *DNSControllerScope) MarkReady() { } func (s *DNSControllerScope) Replace(recordName string, records []Record) { - glog.V(2).Infof("Update %s/%s: %v", s.ScopeName, recordName, records) - s.mutex.Lock() defer s.mutex.Unlock() + existing, exists := s.Records[recordName] + if len(records) == 0 { + if !exists { + glog.V(6).Infof("skipping spurious removal of record %s/%s", s.ScopeName, recordName) + return + } + delete(s.Records, recordName) } else { + if recordsSliceEquals(existing, records) { + glog.V(6).Infof("skipping spurious update of record %s/%s=%s", s.ScopeName, recordName, records) + return + } + s.Records[recordName] = records } + + glog.V(2).Infof("Update %s/%s: %v", s.ScopeName, recordName, records) s.parent.recordChange() } +// recordsSliceEquals compares two []Record +func recordsSliceEquals(l, r []Record) bool { + if len(l) != len(r) { + return false + } + for i := range l { + if l[i] != r[i] { + return false + } + } + return true +} + // CreateScope creates a scope object. func (c *DNSController) CreateScope(scopeName string) (Scope, error) { c.mutex.Lock()