Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions server/src/main/java/com/cloud/server/ManagementServerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -1707,16 +1707,15 @@ protected List<Host> getCapableSuitableHosts(

if (CollectionUtils.isEmpty(suitableHosts)) {
logger.warn("No suitable hosts found.");
} else {
logger.debug("Hosts having capacity and are suitable for migration: {}", suitableHosts);
return suitableHosts;
}

logger.debug("Hosts having capacity and are suitable for migration: {}", suitableHosts);

// Only list hosts of the same architecture as the source Host in a multi-arch zone
if (!suitableHosts.isEmpty()) {
List<CPU.CPUArch> clusterArchs = ApiDBUtils.listZoneClustersArchs(vm.getDataCenterId());
if (CollectionUtils.isNotEmpty(clusterArchs) && clusterArchs.size() > 1) {
suitableHosts = suitableHosts.stream().filter(h -> h.getArch() == srcHost.getArch()).collect(Collectors.toList());
}
List<CPU.CPUArch> clusterArchs = ApiDBUtils.listZoneClustersArchs(vm.getDataCenterId());
if (CollectionUtils.isNotEmpty(clusterArchs) && clusterArchs.size() > 1) {
suitableHosts = suitableHosts.stream().filter(h -> h.getArch() == srcHost.getArch()).collect(Collectors.toList());
}

return suitableHosts;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import com.cloud.deploy.DataCenterDeployment;
import com.cloud.deploy.DeploymentPlanner;
import com.cloud.deploy.DeploymentPlanningManager;
import com.cloud.vm.VirtualMachineProfile;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
Expand Down Expand Up @@ -181,6 +185,24 @@ public class ManagementServerImplTest {
@Mock
HostAllocator hostAllocator;

@Mock
VirtualMachine virtualMachineMock;

@Mock
VirtualMachineProfile virtualMachineProfileMock;

@Mock
DataCenterDeployment dataCenterDeploymentMock;

@Mock
DeploymentPlanner.ExcludeList excludeListMock;

@Mock
Host hostMock;

@Mock
DeploymentPlanningManager deploymentPlanningManagerMock;

private AutoCloseable closeable;
private MockedStatic<ApiDBUtils> apiDBUtilsMock;

Expand Down Expand Up @@ -1053,10 +1075,19 @@ public void testListGuestOSCategoriesByCriteria_FilterById() {

@Test
public void testGetExternalVmConsole() {
VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class);
Host host = Mockito.mock(Host.class);
Mockito.when(extensionManager.getInstanceConsole(virtualMachine, host)).thenReturn(Mockito.mock(com.cloud.agent.api.Answer.class));
Assert.assertNotNull(spy.getExternalVmConsole(virtualMachine, host));
Mockito.verify(extensionManager).getInstanceConsole(virtualMachine, host);
Mockito.when(extensionManager.getInstanceConsole(virtualMachineMock, host)).thenReturn(Mockito.mock(com.cloud.agent.api.Answer.class));
Assert.assertNotNull(spy.getExternalVmConsole(virtualMachineMock, host));
Mockito.verify(extensionManager).getInstanceConsole(virtualMachineMock, host);
}

@Test
public void getCapableSuitableHostsTestHostArchIsNotFilteredWhenNoSuitableHostsAreFound() {
List<Host> compatibleHosts = List.of(hostMock);
Mockito.doReturn(null).when(hostAllocator).allocateTo(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyList(), Mockito.anyInt(), Mockito.anyBoolean());

spy.getCapableSuitableHosts(virtualMachineMock, virtualMachineProfileMock, dataCenterDeploymentMock, compatibleHosts, excludeListMock, hostMock);

apiDBUtilsMock.verify(() -> ApiDBUtils.listZoneClustersArchs(Mockito.anyLong()), Mockito.never());
}
}
Loading