rfc2136: avoid index calculations

This commit is contained in:
Pascal Bachor 2025-07-23 20:31:31 +02:00
parent 84ee04e575
commit 2333e93f1e

View File

@ -389,8 +389,7 @@ func (r *rfc2136Provider) ApplyChanges(ctx context.Context, changes *plan.Change
} }
} }
updateOld := changes.UpdateOld() for c, chunk := range chunkBy(changes.Update, r.batchChangeSize) {
for c, chunk := range chunkBy(changes.UpdateNew(), r.batchChangeSize) {
log.Debugf("Processing batch %d of update changes", c) log.Debugf("Processing batch %d of update changes", c)
m := make(map[string]*dns.Msg) m := make(map[string]*dns.Msg)
@ -400,21 +399,19 @@ func (r *rfc2136Provider) ApplyChanges(ctx context.Context, changes *plan.Change
m[z] = new(dns.Msg) m[z] = new(dns.Msg)
} }
for i, ep := range chunk { for _, update := range chunk {
if !r.domainFilter.Match(ep.DNSName) { if !r.domainFilter.Match(update.New.DNSName) {
log.Debugf("Skipping record %s because it was filtered out by the specified --domain-filter", ep.DNSName) log.Debugf("Skipping record %s because it was filtered out by the specified --domain-filter", update.New.DNSName)
continue continue
} }
zone := findMsgZone(ep, r.zoneNames) zone := findMsgZone(update.New, r.zoneNames)
m[zone].SetUpdate(zone) m[zone].SetUpdate(zone)
// calculate corresponding index in the unsplitted UpdateOld for current endpoint ep in chunk r.UpdateRecord(m[zone], update.Old, update.New)
j := (c * r.batchChangeSize) + i if r.createPTR && (update.New.RecordType == "A" || update.New.RecordType == "AAAA") {
r.UpdateRecord(m[zone], updateOld[j], ep) r.RemoveReverseRecord(update.Old.Targets[0], update.New.DNSName)
if r.createPTR && (ep.RecordType == "A" || ep.RecordType == "AAAA") { r.AddReverseRecord(update.New.Targets[0], update.New.DNSName)
r.RemoveReverseRecord(updateOld[j].Targets[0], ep.DNSName)
r.AddReverseRecord(ep.Targets[0], ep.DNSName)
} }
} }
@ -629,16 +626,11 @@ func (r *rfc2136Provider) SendMessage(msg *dns.Msg) error {
return lastErr return lastErr
} }
func chunkBy(slice []*endpoint.Endpoint, chunkSize int) [][]*endpoint.Endpoint { func chunkBy[T any](slice []T, chunkSize int) [][]T {
var chunks [][]*endpoint.Endpoint var chunks [][]T
for i := 0; i < len(slice); i += chunkSize { for i := 0; i < len(slice); i += chunkSize {
end := i + chunkSize end := min(i+chunkSize, len(slice))
if end > len(slice) {
end = len(slice)
}
chunks = append(chunks, slice[i:end]) chunks = append(chunks, slice[i:end])
} }