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 fd538efffc..3ec8f716e1 100644 --- a/dns-controller/pkg/dns/dnscontroller.go +++ b/dns-controller/pkg/dns/dnscontroller.go @@ -482,19 +482,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()