From d5005bfedf0462f8911e84fb70d21f93c6048645 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Tue, 28 Sep 2021 19:30:41 +0800 Subject: [PATCH] fix(region): optimized dns zone sync --- pkg/compute/models/cloudaccounts.go | 13 ++++++++++--- pkg/compute/models/dns_zones.go | 21 +++++++++++++-------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index ed53506dc6..feec1698c5 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -2786,6 +2786,13 @@ func (self *SCloudaccount) SyncDnsZones(ctx context.Context, userCred mcclient.T result.UpdateError(errors.Wrapf(err, "SyncWithCloudDnsZone")) continue } + zone, err := commondb[i].GetDnsZone() + if err != nil { + result.UpdateError(errors.Wrapf(err, "GetDnsZone")) + continue + } + localZones = append(localZones, *zone) + remoteZones = append(remoteZones, commonext[i]) result.Update() } @@ -2797,10 +2804,10 @@ func (self *SCloudaccount) SyncDnsZones(ctx context.Context, userCred mcclient.T continue } if isNew { - localZones = append(localZones, *dnsZone) - remoteZones = append(remoteZones, added[i]) + result.Add() } - result.Add() + localZones = append(localZones, *dnsZone) + remoteZones = append(remoteZones, added[i]) } return localZones, remoteZones, result diff --git a/pkg/compute/models/dns_zones.go b/pkg/compute/models/dns_zones.go index 5ca5be5aad..e27b504e48 100644 --- a/pkg/compute/models/dns_zones.go +++ b/pkg/compute/models/dns_zones.go @@ -654,14 +654,19 @@ func (self *SDnsZone) SyncDnsRecordSets(ctx context.Context, userCred mcclient.T result.Delete() } - if self.ZoneType == string(cloudprovider.PrivateZone) { - for i := range update { - _record, err := DnsRecordSetManager.FetchById(update[i].Id) - if err != nil { - result.UpdateError(errors.Wrapf(err, "DnsRecordSetManager.FetchById(%s)", del[i].Id)) - continue - } - record := _record.(*SDnsRecordSet) + for i := range update { + _record, err := DnsRecordSetManager.FetchById(update[i].Id) + if err != nil { + result.UpdateError(errors.Wrapf(err, "DnsRecordSetManager.FetchById(%s)", del[i].Id)) + continue + } + record := _record.(*SDnsRecordSet) + caches, err := self.GetDnsZoneCaches() + if err != nil { + result.UpdateError(errors.Wrapf(err, "GetDnsZoneCaches")) + continue + } + if self.ZoneType == string(cloudprovider.PrivateZone) || len(caches) < 2 { err = record.syncWithCloudDnsRecord(ctx, userCred, provider, update[i]) if err != nil { result.UpdateError(errors.Wrapf(err, "syncWithCloudDnsRecord"))