diff --git a/engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sql b/engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sql index 96fde41216d..80ecdc18675 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sql @@ -547,7 +547,7 @@ CREATE TABLE IF NOT EXISTS `cloud`.`dns_zone_network_map` ( `created` datetime NOT NULL COMMENT 'date created', `removed` datetime DEFAULT NULL COMMENT 'Date removed (soft delete)', PRIMARY KEY (`id`), - CONSTRAINT `uc_dns_zone__uuid` UNIQUE (`uuid`), + CONSTRAINT `uc_dns_zone_network_map__uuid` UNIQUE (`uuid`), KEY `fk_dns_map__zone_id` (`dns_zone_id`), KEY `fk_dns_map__network_id` (`network_id`), CONSTRAINT `fk_dns_map__zone_id` FOREIGN KEY (`dns_zone_id`) REFERENCES `dns_zone` (`id`) ON DELETE CASCADE, diff --git a/server/src/main/java/com/cloud/api/ApiDBUtils.java b/server/src/main/java/com/cloud/api/ApiDBUtils.java index cb1bf33fbde..72463ddb171 100644 --- a/server/src/main/java/com/cloud/api/ApiDBUtils.java +++ b/server/src/main/java/com/cloud/api/ApiDBUtils.java @@ -2314,7 +2314,7 @@ public class ApiDBUtils { DnsZoneNetworkMapVO dnsNetworkMapVO = s_dnsZoneNetworkMapDao.findByNetworkId(networkId); if (dnsNetworkMapVO != null) { DnsZoneVO dnsZoneVO = s_dnsZoneDao.findById(dnsNetworkMapVO.getDnsZoneId()); - if (Strings.isNotBlank(dnsZoneVO.getName())) { + if (dnsZoneVO != null && Strings.isNotBlank(dnsZoneVO.getName())) { return new Pair<> (dnsZoneVO.getName(), dnsNetworkMapVO.getSubDomain()); } } 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 d113f893366..b451da1baf7 100644 --- a/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java @@ -320,12 +320,12 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa accountMgr.checkAccess(caller, null, true, dnsServer); return Transaction.execute((TransactionCallback) status -> { if (cmd.getCleanup()) { - List dnsZones = dnsZoneDao.findDnsZonesByServerId(dnsServerId); - for (DnsZoneVO dnsZone : dnsZones) { + List dnsZoneIds = dnsZoneDao.findDnsZoneIdsByServerId(dnsServerId); + for (Long dnsZoneId : dnsZoneIds) { try { - deleteDnsZone(dnsZone.getId(), cmd.isUnmanage()); + deleteDnsZone(dnsZoneId, cmd.isUnmanage()); } catch (Exception ex) { - logger.error("Error cleaning up DNS zone: {} during DNS server: {} deletion", dnsZone.getName(), dnsServer.getName()); + logger.error("Error cleaning up DNS zone: {} during DNS server: {} deletion", dnsZoneId, dnsServer.getName()); } } } diff --git a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDao.java b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDao.java index bdb2d5de19c..43bf60818d5 100644 --- a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDao.java +++ b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDao.java @@ -33,5 +33,5 @@ public interface DnsZoneDao extends GenericDao { Pair, Integer> searchZones(Long id, Long accountId, List ownDnsServerIds, Long targetDnsServerId, String keyword, Filter filter); - List findDnsZonesByServerId(long dnsServerId); + List findDnsZoneIdsByServerId(long dnsServerId); } diff --git a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImpl.java b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImpl.java index 70e8c6f9c0a..2487f2fee20 100644 --- a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImpl.java +++ b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImpl.java @@ -17,7 +17,9 @@ package org.apache.cloudstack.dns.dao; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.dns.DnsZone; @@ -114,9 +116,13 @@ public class DnsZoneDaoImpl extends GenericDaoBase implements D return searchAndCount(sc, filter); } - public List findDnsZonesByServerId(long dnsServerId) { + public List findDnsZoneIdsByServerId(long dnsServerId) { SearchCriteria sc = DnsServerSearch.create(); sc.setParameters(ApiConstants.DNS_SERVER_ID, dnsServerId); - return listBy(sc); + List dnsZones = listBy(sc); + if (CollectionUtils.isEmpty(dnsZones)) { + return new ArrayList<>(); + } + return dnsZones.stream().map(DnsZoneVO::getId).collect(Collectors.toList()); } } diff --git a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneNetworkMapDao.java b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneNetworkMapDao.java index 72669348c3d..19c688ebc04 100644 --- a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneNetworkMapDao.java +++ b/server/src/main/java/org/apache/cloudstack/dns/dao/DnsZoneNetworkMapDao.java @@ -25,5 +25,5 @@ public interface DnsZoneNetworkMapDao extends GenericDao zones = Collections.singletonList(zoneVO); - when(dnsZoneDao.findDnsZonesByServerId(SERVER_ID)).thenReturn(zones); + List zones = Collections.singletonList(ZONE_ID); + when(dnsZoneDao.findDnsZoneIdsByServerId(SERVER_ID)).thenReturn(zones); when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO); when(dnsZoneNetworkMapDao.findByZoneId(ZONE_ID)).thenReturn(null); when(dnsServerDao.remove(SERVER_ID)).thenReturn(true); diff --git a/server/src/test/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImplTest.java b/server/src/test/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImplTest.java index 817bcd980c4..8001b52f5b0 100644 --- a/server/src/test/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImplTest.java +++ b/server/src/test/java/org/apache/cloudstack/dns/dao/DnsZoneDaoImplTest.java @@ -71,11 +71,11 @@ public class DnsZoneDaoImplTest { } @Test - public void testFindDnsZonesByServerId() { + public void testFindDnsZoneIdsByServerId() { List expected = Collections.singletonList(mockZone); doReturn(expected).when(dao).listBy(any(SearchCriteria.class)); - List result = dao.findDnsZonesByServerId(1L); + List result = dao.findDnsZoneIdsByServerId(1L); assertEquals(1, result.size()); } diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index bfb0294c83a..37abd43e46c 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -207,7 +207,7 @@ -