What problem are you trying to solve?
#1438 added dns.bump_serial_on_unchanged_save. With false, the zone editor and the single record form leave the SOA serial alone when a save changes nothing. The public API does not honour the setting yet: PUT /api/v2/zones/{id}/records/{rid}, the RRset PATCH/PUT endpoints and the bulk record endpoint call updateSOASerial() after every write, and on the API backend the write itself makes PowerDNS bump through SOA-EDIT-API.
External reconciliation loops (Terraform, ExternalDNS, scripts that re-apply the same data) are the case the setting was asked for in the first place, so the API is where it matters most.
What would you like implemented?
When dns.bump_serial_on_unchanged_save is false:
- A record update whose normalized name, type, content, TTL, priority and disabled flag match the stored row skips the write and the serial bump, and still returns 200 with the unchanged record.
- An RRset replacement whose resulting record set equals the stored set does the same.
- Bulk updates bump once only if at least one record actually changed.
RecordManager::recordFieldsDiffer() already does the row comparison for the web form and can be reused. With the default true nothing changes.
Additional context (optional)
Follows #1438. DNSSEC signing keeps bumping unconditionally either way.
What problem are you trying to solve?
#1438 added
dns.bump_serial_on_unchanged_save. Withfalse, the zone editor and the single record form leave the SOA serial alone when a save changes nothing. The public API does not honour the setting yet:PUT /api/v2/zones/{id}/records/{rid}, the RRsetPATCH/PUTendpoints and the bulk record endpoint callupdateSOASerial()after every write, and on the API backend the write itself makes PowerDNS bump throughSOA-EDIT-API.External reconciliation loops (Terraform, ExternalDNS, scripts that re-apply the same data) are the case the setting was asked for in the first place, so the API is where it matters most.
What would you like implemented?
When
dns.bump_serial_on_unchanged_saveisfalse:RecordManager::recordFieldsDiffer()already does the row comparison for the web form and can be reused. With the defaulttruenothing changes.Additional context (optional)
Follows #1438. DNSSEC signing keeps bumping unconditionally either way.