From a036281cd96bdffb8215aa5f3f55627bb66c71aa Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Mon, 13 Apr 2026 18:31:50 +0530 Subject: [PATCH] split cleanup of old dns urls and new record registration --- .../dns/DnsProviderManagerImpl.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java b/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java index 5b7b6dd1b0f..d9da2303065 100644 --- a/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java @@ -1009,26 +1009,31 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa List nicsForThisFqdn = newUrlEntry.getValue(); try { + Set oldDnsRecordUrls = new HashSet<>(); + Transaction.execute(new TransactionCallbackWithExceptionNoReturn() { + @Override + public void doInTransactionWithoutResult(TransactionStatus status) throws DnsProviderException { + for (DnsNicJoinVO nic : nicsForThisFqdn) { + if (nic.getNicDnsUrl() != null) { + oldDnsRecordUrls.add(nic.getNicDnsUrl()); + nicDetailsDao.removeDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD); + } + } + for (String oldUrl : oldDnsRecordUrls) { + syncDnsRecordsState(instanceId, oldUrl, targetZoneId); + } + } + }); + Transaction.execute(new TransactionCallbackWithExceptionNoReturn() { @Override public void doInTransactionWithoutResult(TransactionStatus status) throws DnsProviderException { if (isDnsCollision(newDnsRecordUrl, targetZoneId, instanceId)) { return; } - - Set oldDnsRecordUrls = new HashSet<>(); for (DnsNicJoinVO nic : nicsForThisFqdn) { - if (nic.getNicDnsUrl() != null) { - oldDnsRecordUrls.add(nic.getNicDnsUrl()); - } nicDetailsDao.addDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD, newDnsRecordUrl, true); } - - // NICs for the old URL and cleanly send a DELETE API call to PowerDNS! - for (String oldUrl : oldDnsRecordUrls) { - syncDnsRecordsState(instanceId, oldUrl, targetZoneId); - } - // This sync call finds the newly written intent and sends an ADD/REPLACE call. syncDnsRecordsState(instanceId, newDnsRecordUrl, targetZoneId); }