This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch opensuse-fix
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 8b317f7e881c2f6eb8b844319b2d7c66828f3b8c
Author: nvazquez <[email protected]>
AuthorDate: Mon Jun 2 14:49:59 2025 -0300

    Sort instead of filtering by preferred arch
---
 .../com/cloud/storage/dao/VMTemplateDaoImpl.java   |  8 ++++----
 .../cloud/storage/dao/VMTemplateDaoImplTest.java   | 23 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git 
a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java 
b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
index 42bef095a97..b6796cf8f9d 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -585,12 +585,12 @@ public class VMTemplateDaoImpl extends 
GenericDaoBase<VMTemplateVO, Long> implem
             return null;
         }
         if (StringUtils.isNotBlank(preferredArch)) {
+            // Sort the templates by preferred architecture first
             templates = templates.stream()
-                    .filter(x -> 
x.getArch().getType().equalsIgnoreCase(preferredArch))
+                    .sorted(Comparator.comparing(
+                            x -> 
!x.getArch().getType().equalsIgnoreCase(preferredArch)
+                    ))
                     .collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(templates)) {
-                return null;
-            }
         }
         if (hypervisorType == HypervisorType.Any) {
             return templates.get(0);
diff --git 
a/engine/schema/src/test/java/com/cloud/storage/dao/VMTemplateDaoImplTest.java 
b/engine/schema/src/test/java/com/cloud/storage/dao/VMTemplateDaoImplTest.java
index df0b36ebdbf..a0c42e7e376 100644
--- 
a/engine/schema/src/test/java/com/cloud/storage/dao/VMTemplateDaoImplTest.java
+++ 
b/engine/schema/src/test/java/com/cloud/storage/dao/VMTemplateDaoImplTest.java
@@ -31,6 +31,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
@@ -186,4 +187,26 @@ public class VMTemplateDaoImplTest {
         VMTemplateVO result = 
templateDao.findLatestTemplateByTypeAndHypervisorAndArch(hypervisorType, arch, 
type);
         assertNull(result);
     }
+
+    @Test
+    public void testFindSystemVMReadyTemplate() {
+        Long zoneId = 1L;
+        VMTemplateVO systemVmTemplate1 = mock(VMTemplateVO.class);
+        Mockito.when(systemVmTemplate1.getArch()).thenReturn(CPU.CPUArch.x86);
+        
Mockito.when(systemVmTemplate1.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
+        VMTemplateVO systemVmTemplate2 = mock(VMTemplateVO.class);
+        Mockito.when(systemVmTemplate2.getArch()).thenReturn(CPU.CPUArch.x86);
+        
Mockito.when(systemVmTemplate2.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
+        VMTemplateVO systemVmTemplate3 = mock(VMTemplateVO.class);
+        
Mockito.when(systemVmTemplate3.getArch()).thenReturn(CPU.CPUArch.arm64);
+        
Mockito.when(systemVmTemplate3.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
+        List<VMTemplateVO> templates = Arrays.asList(systemVmTemplate1, 
systemVmTemplate2, systemVmTemplate3);
+        
Mockito.when(hostDao.listDistinctHypervisorTypes(zoneId)).thenReturn(Arrays.asList(Hypervisor.HypervisorType.KVM));
+        SearchBuilder<VMTemplateVO> sb = mock(SearchBuilder.class);
+        templateDao.readySystemTemplateSearch = sb;
+        when(sb.create()).thenReturn(mock(SearchCriteria.class));
+        
doReturn(templates).when(templateDao).listBy(any(SearchCriteria.class), 
any(Filter.class));
+        VMTemplateVO readyTemplate = 
templateDao.findSystemVMReadyTemplate(zoneId, Hypervisor.HypervisorType.KVM, 
CPU.CPUArch.arm64.getType());
+        Assert.assertEquals(CPU.CPUArch.arm64, readyTemplate.getArch());
+    }
 }

Reply via email to