mirror of https://github.com/apache/cloudstack.git
server: Fix NPE when on findHostsForMigration when no suitable hosts are found (#13138)
This commit is contained in:
parent
e1521f139b
commit
5893ba5a8c
|
|
@ -1707,16 +1707,15 @@ public class ManagementServerImpl extends MutualExclusiveIdsManagerBase implemen
|
|||
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@ import static org.mockito.Mockito.lenient;
|
|||
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;
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
@ -1053,10 +1075,19 @@ public class ManagementServerImplTest {
|
|||
|
||||
@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…
Reference in New Issue