Specify and clarify root cause of issue 4241

This commit is contained in:
Leonardo Quatrocchi 2024-04-06 03:25:05 -03:00
parent ba56b7abb3
commit d9b743922a
3 changed files with 24 additions and 4 deletions

View File

@ -210,9 +210,12 @@ func (c *Controller) RunOnce(ctx context.Context) error {
return err return err
} }
//records = endpoint.RemoveDuplicates(records) records = endpoint.RemoveDuplicates(records)
//This deduplication could be a different but valid solution //This deduplication seems to be the a good fit
//Duplicated endpoints were living on this variable
//In all versions for the overlapping zones
//With this in place the change on plan.go is not needed //With this in place the change on plan.go is not needed
//Also it saves some rounds of cpu
//Keeping this here until we decide what's best //Keeping this here until we decide what's best
registryEndpointsTotal.Set(float64(len(records))) registryEndpointsTotal.Set(float64(len(records)))
regARecords, regAAAARecords := countAddressRecords(records) regARecords, regAAAARecords := countAddressRecords(records)

View File

@ -345,6 +345,8 @@ type DNSEndpointList struct {
} }
// RemoveDuplicates returns a slice holding the unique endpoints. // RemoveDuplicates returns a slice holding the unique endpoints.
// This function doesn't contemplate the Targets of an Endpoint
// as part of the primary Key
func RemoveDuplicates(endpoints []*Endpoint) []*Endpoint { func RemoveDuplicates(endpoints []*Endpoint) []*Endpoint {
visited := make(map[EndpointKey]struct{}) visited := make(map[EndpointKey]struct{})
result := []*Endpoint{} result := []*Endpoint{}

View File

@ -170,6 +170,20 @@ func (p *Plan) Calculate() *Plan {
if p.DomainFilter == nil { if p.DomainFilter == nil {
p.DomainFilter = endpoint.MatchAllDomainFilters(nil) p.DomainFilter = endpoint.MatchAllDomainFilters(nil)
} }
// Root cause of the issue:
// Behavior on 0.14.0 on Deletes
// ------------------------------------------------------------------------------------------------------
// DNSName | Current record | Desired Records (Candidate) |
// ------------------------------------------------------------------------------------------------------
// dnsname.zone.com |[dnsname.zone.com IN A]dnsname.zone.com IN A (dup ep)| [] |
// ------------------------------------------------------------------------------------------------------
//
// Behavior on 0.13.6 on Deletes
// ------------------------------------------------------------------------------------------------------
// DNSName | Current record | Desired Records (Candidate) |
// ------------------------------------------------------------------------------------------------------
// dnsname.zone.com | [dnsname.zone.com IN CNAME ] | [] |
// ------------------------------------------------------------------------------------------------------
for _, current := range filterRecordsForPlan(p.Current, p.DomainFilter, p.ManagedRecords, p.ExcludeRecords) { for _, current := range filterRecordsForPlan(p.Current, p.DomainFilter, p.ManagedRecords, p.ExcludeRecords) {
t.addCurrent(current) t.addCurrent(current)
@ -252,10 +266,11 @@ func (p *Plan) Calculate() *Plan {
// filter out updates this external dns does not have ownership claim over // filter out updates this external dns does not have ownership claim over
if p.OwnerID != "" { if p.OwnerID != "" {
changes.Delete = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.Delete) changes.Delete = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.Delete)
// Remove duplicated endpoints generated by plan.go on Line 196 // Remove duplicated endpoints generated by plan.go on Line 210
changes.Delete = endpoint.RemoveDuplicates(changes.Delete) // changes.Delete = endpoint.RemoveDuplicates(changes.Delete)
// This was not needed on version 0.13.6, but it seems like // This was not needed on version 0.13.6, but it seems like
// the old function/code had the ability of removing duplicated endpoints // the old function/code had the ability of removing duplicated endpoints
// While the filterRecordsForPlan and addCurrent functions were running
changes.UpdateOld = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.UpdateOld) changes.UpdateOld = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.UpdateOld)
changes.UpdateNew = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.UpdateNew) changes.UpdateNew = endpoint.FilterEndpointsByOwnerID(p.OwnerID, changes.UpdateNew)
} }