mirror of https://github.com/apache/cloudstack.git
engine-schema,server,plugins: list host IDs instead whole row where
applicable Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
fe4ef05053
commit
1d47e4d4ae
|
|
@ -81,6 +81,8 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
|
|||
|
||||
List<HostVO> findHypervisorHostInCluster(long clusterId);
|
||||
|
||||
HostVO findAnyStateHypervisorHostInCluster(long clusterId);
|
||||
|
||||
HostVO findOldestExistentHypervisorHostInCluster(long clusterId);
|
||||
|
||||
List<HostVO> listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long podId, long dcId, String haTag);
|
||||
|
|
@ -174,4 +176,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
|
|||
List<Long> listAllIds();
|
||||
|
||||
List<HypervisorType> findDistinctHypervisorTypesForZone(final long zoneId);
|
||||
|
||||
List<Long> listAllHostIdsInCluster(final long clusterId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -456,6 +456,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
|||
HostIdSearch = createSearchBuilder(Long.class);
|
||||
HostIdSearch.selectFields(HostIdSearch.entity().getId());
|
||||
HostIdSearch.and("dataCenterId", HostIdSearch.entity().getDataCenterId(), Op.EQ);
|
||||
HostIdSearch.and("clusterId", HostIdSearch.entity().getClusterId(), Op.EQ);
|
||||
HostIdSearch.done();
|
||||
|
||||
_statusAttr = _allAttributes.get("status");
|
||||
|
|
@ -1255,6 +1256,15 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
|||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HostVO findAnyStateHypervisorHostInCluster(long clusterId) {
|
||||
SearchCriteria<HostVO> sc = TypeClusterStatusSearch.create();
|
||||
sc.setParameters("type", Host.Type.Routing);
|
||||
sc.setParameters("cluster", clusterId);
|
||||
List<HostVO> list = listBy(sc, new Filter(1));
|
||||
return list.isEmpty() ? null : list.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HostVO findOldestExistentHypervisorHostInCluster(long clusterId) {
|
||||
SearchCriteria<HostVO> sc = TypeClusterStatusSearch.create();
|
||||
|
|
@ -1548,10 +1558,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
|||
|
||||
@Override
|
||||
public List<Long> listAllIds() {
|
||||
GenericSearchBuilder<HostVO, Long> sb = createSearchBuilder(Long.class);
|
||||
sb.selectFields(sb.entity().getId());
|
||||
sb.done();
|
||||
return customSearch(sb.create(), null);
|
||||
return customSearch(HostIdSearch.create(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1566,4 +1573,11 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
|||
sc.setParameters("type", Type.Routing);
|
||||
return customSearch(sc, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listAllHostIdsInCluster(final long clusterId) {
|
||||
SearchCriteria<Long> sc = HostIdSearch.create();
|
||||
sc.setParameters("clusterId", clusterId);
|
||||
return customSearch(sc, null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,15 +21,16 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.exception.InsufficientServerCapacityException;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
|
|
@ -39,7 +40,6 @@ import com.cloud.utils.DateUtil;
|
|||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
public class ImplicitDedicationPlanner extends FirstFitPlanner implements DeploymentClusterPlanner {
|
||||
|
||||
|
|
@ -75,12 +75,11 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy
|
|||
boolean preferred = isServiceOfferingUsingPlannerInPreferredMode(vmProfile.getServiceOfferingId());
|
||||
|
||||
// Get the list of all the hosts in the given clusters
|
||||
List<Long> allHosts = new ArrayList<Long>();
|
||||
for (Long cluster : clusterList) {
|
||||
List<HostVO> hostsInCluster = resourceMgr.listAllHostsInCluster(cluster);
|
||||
for (HostVO hostVO : hostsInCluster) {
|
||||
allHosts.add(hostVO.getId());
|
||||
}
|
||||
List<Long> allHosts = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(clusterList)) {
|
||||
allHosts = clusterList.stream()
|
||||
.flatMap(cluster -> hostDao.listAllHostIdsInCluster(cluster).stream())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
// Go over all the hosts in the cluster and get a list of
|
||||
|
|
@ -223,20 +222,15 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy
|
|||
}
|
||||
|
||||
private List<Long> getUpdatedClusterList(List<Long> clusterList, Set<Long> hostsSet) {
|
||||
List<Long> updatedClusterList = new ArrayList<Long>();
|
||||
for (Long cluster : clusterList) {
|
||||
List<HostVO> hosts = resourceMgr.listAllHostsInCluster(cluster);
|
||||
Set<Long> hostsInClusterSet = new HashSet<Long>();
|
||||
for (HostVO host : hosts) {
|
||||
hostsInClusterSet.add(host.getId());
|
||||
}
|
||||
|
||||
if (!hostsSet.containsAll(hostsInClusterSet)) {
|
||||
updatedClusterList.add(cluster);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(clusterList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
return updatedClusterList;
|
||||
return clusterList.stream()
|
||||
.filter(cluster -> {
|
||||
Set<Long> hostsInClusterSet = new HashSet<>(hostDao.listAllHostIdsInCluster(cluster));
|
||||
return !hostsSet.containsAll(hostsInClusterSet);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -256,15 +250,11 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy
|
|||
Account account = vmProfile.getOwner();
|
||||
|
||||
// Get the list of all the hosts in the given clusters
|
||||
List<Long> allHosts = new ArrayList<Long>();
|
||||
if (!CollectionUtils.isEmpty(clusterList)) {
|
||||
for (Long cluster : clusterList) {
|
||||
List<HostVO> hostsInCluster = resourceMgr.listAllHostsInCluster(cluster);
|
||||
for (HostVO hostVO : hostsInCluster) {
|
||||
|
||||
allHosts.add(hostVO.getId());
|
||||
}
|
||||
}
|
||||
List<Long> allHosts = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(clusterList)) {
|
||||
allHosts = clusterList.stream()
|
||||
.flatMap(cluster -> hostDao.listAllHostIdsInCluster(cluster).stream())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
// Go over all the hosts in the cluster and get a list of
|
||||
// 1. All empty hosts, not running any vms.
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@
|
|||
// under the License.
|
||||
package org.apache.cloudstack.implicitplanner;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.everyItem;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.everyItem;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
|
@ -36,7 +36,11 @@ import java.util.UUID;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.user.User;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
||||
import org.apache.cloudstack.test.utils.SpringUtils;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
|
@ -54,12 +58,6 @@ import org.springframework.test.context.ContextConfiguration;
|
|||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
||||
import org.apache.cloudstack.test.utils.SpringUtils;
|
||||
|
||||
import com.cloud.capacity.Capacity;
|
||||
import com.cloud.capacity.CapacityManager;
|
||||
import com.cloud.capacity.dao.CapacityDao;
|
||||
|
|
@ -73,7 +71,6 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList;
|
|||
import com.cloud.deploy.ImplicitDedicationPlanner;
|
||||
import com.cloud.exception.InsufficientServerCapacityException;
|
||||
import com.cloud.gpu.dao.HostGpuGroupsDao;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
import com.cloud.host.dao.HostDetailsDao;
|
||||
import com.cloud.host.dao.HostTagsDao;
|
||||
|
|
@ -90,6 +87,7 @@ import com.cloud.storage.dao.VolumeDao;
|
|||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.user.UserVO;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
|
|
@ -387,21 +385,9 @@ public class ImplicitPlannerTest {
|
|||
when(serviceOfferingDetailsDao.listDetailsKeyPairs(offeringId)).thenReturn(details);
|
||||
|
||||
// Initialize hosts in clusters
|
||||
HostVO host1 = mock(HostVO.class);
|
||||
when(host1.getId()).thenReturn(5L);
|
||||
HostVO host2 = mock(HostVO.class);
|
||||
when(host2.getId()).thenReturn(6L);
|
||||
HostVO host3 = mock(HostVO.class);
|
||||
when(host3.getId()).thenReturn(7L);
|
||||
List<HostVO> hostsInCluster1 = new ArrayList<HostVO>();
|
||||
List<HostVO> hostsInCluster2 = new ArrayList<HostVO>();
|
||||
List<HostVO> hostsInCluster3 = new ArrayList<HostVO>();
|
||||
hostsInCluster1.add(host1);
|
||||
hostsInCluster2.add(host2);
|
||||
hostsInCluster3.add(host3);
|
||||
when(resourceMgr.listAllHostsInCluster(1)).thenReturn(hostsInCluster1);
|
||||
when(resourceMgr.listAllHostsInCluster(2)).thenReturn(hostsInCluster2);
|
||||
when(resourceMgr.listAllHostsInCluster(3)).thenReturn(hostsInCluster3);
|
||||
when(hostDao.listAllHostIdsInCluster(1)).thenReturn(List.of(5L));
|
||||
when(hostDao.listAllHostIdsInCluster(2)).thenReturn(List.of(6L));
|
||||
when(hostDao.listAllHostIdsInCluster(3)).thenReturn(List.of(7L));
|
||||
|
||||
// Mock vms on each host.
|
||||
long offeringIdForVmsOfThisAccount = 15L;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import javax.naming.ConfigurationException;
|
|||
import javax.persistence.EntityExistsException;
|
||||
|
||||
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||
|
|
@ -146,8 +147,8 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||
sc.and(sc.entity().getGuid(), Op.EQ, guid);
|
||||
List<ClusterVO> clusters = sc.list();
|
||||
ClusterVO clu = clusters.get(0);
|
||||
List<HostVO> clusterHosts = _resourceMgr.listAllHostsInCluster(clu.getId());
|
||||
if (clusterHosts == null || clusterHosts.size() == 0) {
|
||||
List<Long> clusterHostIds = _hostDao.listAllHostIdsInCluster(clu.getId());
|
||||
if (CollectionUtils.isEmpty(clusterHostIds)) {
|
||||
clu.setGuid(null);
|
||||
_clusterDao.update(clu.getId(), clu);
|
||||
_clusterDao.update(cluster.getId(), cluster);
|
||||
|
|
@ -247,8 +248,8 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||
if (clu.getGuid() == null) {
|
||||
setClusterGuid(clu, poolUuid);
|
||||
} else {
|
||||
List<HostVO> clusterHosts = _resourceMgr.listAllHostsInCluster(clusterId);
|
||||
if (clusterHosts != null && clusterHosts.size() > 0) {
|
||||
List<Long> clusterHostIds = _hostDao.listAllHostIdsInCluster(clusterId);
|
||||
if (CollectionUtils.isNotEmpty(clusterHostIds)) {
|
||||
if (!clu.getGuid().equals(poolUuid)) {
|
||||
String msg = "Please join the host " + hostIp + " to XS pool "
|
||||
+ clu.getGuid() + " through XC/XS before adding it through CS UI";
|
||||
|
|
|
|||
|
|
@ -464,11 +464,10 @@ public abstract class LibvirtServerDiscoverer extends DiscovererBase implements
|
|||
throw new IllegalArgumentException("cannot add host, due to can't find cluster: " + host.getClusterId());
|
||||
}
|
||||
|
||||
List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId());
|
||||
if (!hostsInCluster.isEmpty()) {
|
||||
HostVO oneHost = hostsInCluster.get(0);
|
||||
_hostDao.loadDetails(oneHost);
|
||||
String hostOsInCluster = oneHost.getDetail("Host.OS");
|
||||
HostVO existingHostInCluster = hostDao.findAnyStateHypervisorHostInCluster(clusterVO.getId());
|
||||
if (existingHostInCluster != null) {
|
||||
_hostDao.loadDetails(existingHostInCluster);
|
||||
String hostOsInCluster = existingHostInCluster.getDetail("Host.OS");
|
||||
String hostOs = ssCmd.getHostDetails().get("Host.OS");
|
||||
if (!hostOsInCluster.equalsIgnoreCase(hostOs)) {
|
||||
String msg = String.format("host: %s with hostOS, \"%s\"into a cluster, in which there are \"%s\" hosts added", firstCmd.getPrivateIpAddress(), hostOs, hostOsInCluster);
|
||||
|
|
|
|||
|
|
@ -643,8 +643,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
throw ex;
|
||||
} else {
|
||||
if (cluster.getGuid() == null) {
|
||||
final List<HostVO> hosts = listAllHostsInCluster(clusterId);
|
||||
if (!hosts.isEmpty()) {
|
||||
final List<Long> hostIds = _hostDao.listAllHostIdsInCluster(clusterId);
|
||||
if (!hostIds.isEmpty()) {
|
||||
final CloudRuntimeException ex =
|
||||
new CloudRuntimeException("Guid is not updated for cluster with specified cluster id; need to wait for hosts in this cluster to come up");
|
||||
ex.addProxyObject(cluster.getUuid(), "clusterId");
|
||||
|
|
@ -962,8 +962,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
Host hostRemoved = _hostDao.findById(hostId);
|
||||
_hostDao.remove(hostId);
|
||||
if (clusterId != null) {
|
||||
final List<HostVO> hosts = listAllHostsInCluster(clusterId);
|
||||
if (hosts.size() == 0) {
|
||||
final List<Long> hostIds = _hostDao.listAllHostIdsInCluster(clusterId);
|
||||
if (CollectionUtils.isEmpty(hostIds)) {
|
||||
final ClusterVO cluster = _clusterDao.findById(clusterId);
|
||||
cluster.setGuid(null);
|
||||
_clusterDao.update(clusterId, cluster);
|
||||
|
|
@ -1087,8 +1087,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
|
||||
final Hypervisor.HypervisorType hypervisorType = cluster.getHypervisorType();
|
||||
|
||||
final List<HostVO> hosts = listAllHostsInCluster(cmd.getId());
|
||||
if (hosts.size() > 0) {
|
||||
final List<Long> hostIds = _hostDao.listAllHostIdsInCluster(cmd.getId());
|
||||
if (!hostIds.isEmpty()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Cluster: " + cmd.getId() + " still has hosts, can't remove");
|
||||
}
|
||||
|
|
@ -3034,10 +3034,10 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
public boolean updateClusterPassword(final UpdateHostPasswordCmd command) {
|
||||
final boolean shouldUpdateHostPasswd = command.getUpdatePasswdOnHost();
|
||||
// get agents for the cluster
|
||||
final List<HostVO> hosts = listAllHostsInCluster(command.getClusterId());
|
||||
for (final HostVO host : hosts) {
|
||||
final List<Long> hostIds = _hostDao.listAllHostIdsInCluster(command.getClusterId());
|
||||
for (final Long hostId : hostIds) {
|
||||
try {
|
||||
final Boolean result = propagateResourceEvent(host.getId(), ResourceState.Event.UpdatePassword);
|
||||
final Boolean result = propagateResourceEvent(hostId, ResourceState.Event.UpdatePassword);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
|
@ -3046,8 +3046,9 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
}
|
||||
|
||||
if (shouldUpdateHostPasswd) {
|
||||
final boolean isUpdated = doUpdateHostPassword(host.getId());
|
||||
final boolean isUpdated = doUpdateHostPassword(hostId);
|
||||
if (!isUpdated) {
|
||||
HostVO host = _hostDao.findById(hostId);
|
||||
throw new CloudRuntimeException(
|
||||
String.format("CloudStack failed to update the password of %s. Please make sure you are still able to connect to your hosts.", host));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4860,7 +4860,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||
|
||||
private boolean updateHostsInCluster(final UpdateHostPasswordCmd command) {
|
||||
// get all the hosts in this cluster
|
||||
final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(command.getClusterId());
|
||||
final List<Long> hostIds = _hostDao.listAllHostIdsInCluster(command.getClusterId());
|
||||
|
||||
String userNameWithoutSpaces = StringUtils.deleteWhitespace(command.getUsername());
|
||||
if (StringUtils.isBlank(userNameWithoutSpaces)) {
|
||||
|
|
@ -4870,19 +4870,19 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(final TransactionStatus status) {
|
||||
for (final HostVO h : hosts) {
|
||||
for (final Long hostId : hostIds) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Changing password for host name = " + h.getName());
|
||||
s_logger.debug("Changing password for host ID: " + hostId);
|
||||
}
|
||||
// update password for this host
|
||||
final DetailVO nv = _detailsDao.findDetail(h.getId(), ApiConstants.USERNAME);
|
||||
final DetailVO nv = _detailsDao.findDetail(hostId, ApiConstants.USERNAME);
|
||||
if (nv == null) {
|
||||
final DetailVO nvu = new DetailVO(h.getId(), ApiConstants.USERNAME, userNameWithoutSpaces);
|
||||
final DetailVO nvu = new DetailVO(hostId, ApiConstants.USERNAME, userNameWithoutSpaces);
|
||||
_detailsDao.persist(nvu);
|
||||
final DetailVO nvp = new DetailVO(h.getId(), ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(command.getPassword()));
|
||||
final DetailVO nvp = new DetailVO(hostId, ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(command.getPassword()));
|
||||
_detailsDao.persist(nvp);
|
||||
} else if (nv.getValue().equals(userNameWithoutSpaces)) {
|
||||
final DetailVO nvp = _detailsDao.findDetail(h.getId(), ApiConstants.PASSWORD);
|
||||
final DetailVO nvp = _detailsDao.findDetail(hostId, ApiConstants.PASSWORD);
|
||||
nvp.setValue(DBEncryptionUtil.encrypt(command.getPassword()));
|
||||
_detailsDao.persist(nvp);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue