Skip to content

Commit 0b381d4

Browse files
Exclude External hypervisor type during upgrade for System VM template checks (#11435)
* Exclude External hypervisor type during upgrade for System VM template checks
1 parent 2c493d1 commit 0b381d4

File tree

6 files changed

+18
-8
lines changed

6 files changed

+18
-8
lines changed

engine/schema/src/main/java/com/cloud/dc/dao/ClusterDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public interface ClusterDao extends GenericDao<ClusterVO, Long> {
3434

3535
List<HypervisorType> getAvailableHypervisorInZone(Long zoneId);
3636

37-
List<Pair<HypervisorType, CPU.CPUArch>> listDistinctHypervisorsArchAcrossClusters(Long zoneId);
37+
List<Pair<HypervisorType, CPU.CPUArch>> listDistinctHypervisorsAndArchExcludingExternalType(Long zoneId);
3838

3939
List<ClusterVO> listByDcHyType(long dcId, String hyType);
4040

engine/schema/src/main/java/com/cloud/dc/dao/ClusterDaoImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,26 @@ public List<HypervisorType> getAvailableHypervisorInZone(Long zoneId) {
168168
.collect(Collectors.toList());
169169
}
170170

171+
/**
172+
* Returns distinct (HypervisorType, CPUArch) pairs from clusters in the given zone,
173+
* excluding clusters with {@link HypervisorType#External}.
174+
*
175+
* @param zoneId the zone ID to filter by, or {@code null} to include all zones
176+
* @return list of unique hypervisor type and CPU architecture pairs
177+
*/
171178
@Override
172-
public List<Pair<HypervisorType, CPU.CPUArch>> listDistinctHypervisorsArchAcrossClusters(Long zoneId) {
179+
public List<Pair<HypervisorType, CPU.CPUArch>> listDistinctHypervisorsAndArchExcludingExternalType(Long zoneId) {
173180
SearchBuilder<ClusterVO> sb = createSearchBuilder();
174181
sb.select(null, Func.DISTINCT_PAIR, sb.entity().getHypervisorType(), sb.entity().getArch());
175182
sb.and("zoneId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
183+
sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.NEQ);
176184
sb.done();
177185
SearchCriteria<ClusterVO> sc = sb.create();
178186
if (zoneId != null) {
179187
sc.setParameters("zoneId", zoneId);
180188
}
189+
sc.setParameters("hypervisorType", HypervisorType.External);
190+
181191
final List<ClusterVO> clusters = search(sc, null);
182192
return clusters.stream()
183193
.map(c -> new Pair<>(c.getHypervisorType(), c.getArch()))

engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ protected void registerTemplatesForZone(long zoneId, String filePath) {
917917
String nfsVersion = getNfsVersion(storeUrlAndId.second());
918918
mountStore(storeUrlAndId.first(), filePath, nfsVersion);
919919
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> hypervisorArchList =
920-
clusterDao.listDistinctHypervisorsArchAcrossClusters(zoneId);
920+
clusterDao.listDistinctHypervisorsAndArchExcludingExternalType(zoneId);
921921
for (Pair<Hypervisor.HypervisorType, CPU.CPUArch> hypervisorArch : hypervisorArchList) {
922922
Hypervisor.HypervisorType hypervisorType = hypervisorArch.first();
923923
MetadataTemplateDetails templateDetails = getMetadataTemplateDetails(hypervisorType,
@@ -1065,7 +1065,7 @@ public void updateSystemVmTemplates(final Connection conn) {
10651065
public void doInTransactionWithoutResult(final TransactionStatus status) {
10661066
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> hypervisorsInUse;
10671067
try {
1068-
hypervisorsInUse = clusterDao.listDistinctHypervisorsArchAcrossClusters(null);
1068+
hypervisorsInUse = clusterDao.listDistinctHypervisorsAndArchExcludingExternalType(null);
10691069
} catch (final Exception e) {
10701070
throw new CloudRuntimeException("Exception while getting hypervisor types from clusters", e);
10711071
}

engine/schema/src/test/java/com/cloud/dc/dao/ClusterDaoImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void listDistinctHypervisorsArchAcrossClusters_WithZone() {
9292
when(cluster2.getArch()).thenReturn(CPU.CPUArch.arm64);
9393
List<ClusterVO> dummyHosts = Arrays.asList(cluster1, cluster2);
9494
doReturn(dummyHosts).when(clusterDao).search(any(SearchCriteria.class), isNull());
95-
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> result = clusterDao.listDistinctHypervisorsArchAcrossClusters(zoneId);
95+
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> result = clusterDao.listDistinctHypervisorsAndArchExcludingExternalType(zoneId);
9696
assertNotNull(result);
9797
assertEquals(2, result.size());
9898
assertEquals(Hypervisor.HypervisorType.XenServer, result.get(0).first());
@@ -109,7 +109,7 @@ public void listDistinctHypervisorsArchAcrossClusters_WithoutZone() {
109109
when(cluster.getArch()).thenReturn(CPU.CPUArch.amd64);
110110
List<ClusterVO> dummyHosts = Collections.singletonList(cluster);
111111
doReturn(dummyHosts).when(clusterDao).search(any(SearchCriteria.class), isNull());
112-
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> result = clusterDao.listDistinctHypervisorsArchAcrossClusters(zoneId);
112+
List<Pair<Hypervisor.HypervisorType, CPU.CPUArch>> result = clusterDao.listDistinctHypervisorsAndArchExcludingExternalType(zoneId);
113113
assertNotNull(result);
114114
assertEquals(1, result.size());
115115
assertEquals(Hypervisor.HypervisorType.VMware, result.get(0).first());

engine/schema/src/test/java/com/cloud/upgrade/SystemVmTemplateRegistrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ public void testRegisterTemplatesForZone() {
404404
Hypervisor.HypervisorType hypervisorType = Hypervisor.HypervisorType.KVM;
405405
CPU.CPUArch arch = CPU.CPUArch.getDefault();
406406
hypervisorArchList.add(new Pair<>(hypervisorType, arch));
407-
doReturn(hypervisorArchList).when(clusterDao).listDistinctHypervisorsArchAcrossClusters(zoneId);
407+
doReturn(hypervisorArchList).when(clusterDao).listDistinctHypervisorsAndArchExcludingExternalType(zoneId);
408408
SystemVmTemplateRegistration.MetadataTemplateDetails details =
409409
Mockito.mock(SystemVmTemplateRegistration.MetadataTemplateDetails.class);
410410
String name = "existing";

server/src/main/java/com/cloud/storage/StorageManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4029,7 +4029,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
40294029
DataStoreRole.Image, store.getId());
40304030
if (CollectionUtils.isEmpty(stores)) {
40314031
List<Pair<HypervisorType, CPU.CPUArch>> hypervisorTypes =
4032-
_clusterDao.listDistinctHypervisorsArchAcrossClusters(zoneId);
4032+
_clusterDao.listDistinctHypervisorsAndArchExcludingExternalType(zoneId);
40334033
TransactionLegacy txn = TransactionLegacy.open("AutomaticTemplateRegister");
40344034
SystemVmTemplateRegistration systemVmTemplateRegistration = new SystemVmTemplateRegistration();
40354035
String filePath = null;

0 commit comments

Comments
 (0)