diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 23a62800709..712651e535f 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -133,6 +133,7 @@ import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.resource.DummySecondaryStorageResource; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.AccountManager; import com.cloud.user.User; @@ -242,6 +243,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { @Inject StorageService _storageSvr = null; @Inject StorageManager _storageMgr = null; + @Inject SecondaryStorageVmManager _ssvmMgr; protected int _retry = 2; @@ -494,7 +496,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { return ssHost; } else if ( ssHost.getType() == Host.Type.SecondaryStorage) { Long dcId = ssHost.getDataCenterId(); - List ssAHosts = _hostDao.listSecondaryStorageVM(dcId); + List ssAHosts = _ssvmMgr.listUpSecondaryStorageVmHost(dcId); if (ssAHosts == null || ssAHosts.isEmpty() ) { return null; } @@ -520,7 +522,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { private long sendToSSVM(final long dcId, final Command cmd, final Listener listener) { - List ssAHosts = _hostDao.listSecondaryStorageVM(dcId); + List ssAHosts = _ssvmMgr.listUpSecondaryStorageVmHost(dcId); if (ssAHosts == null || ssAHosts.isEmpty() ) { return -1; } @@ -534,7 +536,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } private Answer sendToSSVM(final long dcId, final Command cmd) { - List ssAHosts = _hostDao.listSecondaryStorageVM(dcId); + List ssAHosts = _ssvmMgr.listUpSecondaryStorageVmHost(dcId); if (ssAHosts == null || ssAHosts.isEmpty() ) { return new Answer(cmd, false, "can not find secondary storage VM agent for data center " + dcId); } @@ -548,7 +550,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { List clusters = _clusterDao.listByDcHyType(dcId, type.toString()); int retry = 0; for (ClusterVO cluster : clusters) { - List hosts = _hostDao.listBy(Host.Type.Routing, cluster.getId(), null, dcId); + List hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), null, dcId); for (HostVO host : hosts) { retry++; if (retry > _retry) { @@ -793,7 +795,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } public void startDirectlyConnectedHosts() { - List hosts = _hostDao.findDirectlyConnectedHosts(); + List hosts = _resourceMgr.findDirectlyConnectedHosts(); for (HostVO host : hosts) { loadDirectlyConnectedHost(host, false); } diff --git a/server/src/com/cloud/agent/manager/AgentMonitor.java b/server/src/com/cloud/agent/manager/AgentMonitor.java index 1eb5aab1dff..4ce8b511bda 100755 --- a/server/src/com/cloud/agent/manager/AgentMonitor.java +++ b/server/src/com/cloud/agent/manager/AgentMonitor.java @@ -47,6 +47,8 @@ import com.cloud.resource.ResourceState; import com.cloud.utils.component.Inject; import com.cloud.utils.db.ConnectionConcierge; import com.cloud.utils.db.DB; +import com.cloud.utils.db.SearchCriteria2; +import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.time.InaccurateClock; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.VMInstanceDao; @@ -141,7 +143,10 @@ public class AgentMonitor extends Thread implements Listener { _agentMgr.disconnectWithInvestigation(agentId, Event.PingTimeout); } - List hosts = _hostDao.listByResourceState(ResourceState.PrepareForMaintenance, ResourceState.ErrorInMaintenance); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getResourceState(), Op.IN, ResourceState.PrepareForMaintenance, ResourceState.ErrorInMaintenance); + List hosts = sc.list(); + for (HostVO host : hosts) { long hostId = host.getId(); DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId()); diff --git a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index 07ea22054bd..0a8d3cbbbf6 100755 --- a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -58,6 +58,7 @@ import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.OperationTimedoutException; +import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.Status.Event; @@ -71,7 +72,9 @@ import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.nio.Link; import com.cloud.utils.nio.Task; @@ -709,7 +712,10 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust public void startRebalanceAgents() { s_logger.debug("Management server " + _nodeId + " is asking other peers to rebalance their agents"); List allMS = _mshostDao.listBy(ManagementServerHost.State.Up); - List allManagedAgents = _hostDao.listManagedRoutingAgents(); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getManagementServerId(), Op.NNULL); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + List allManagedAgents = sc.list(); int avLoad = 0; diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java index b591dcb8ff3..f215d55d8ea 100755 --- a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java @@ -41,6 +41,7 @@ import com.cloud.host.dao.HostDetailsDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao; import com.cloud.offering.ServiceOffering; +import com.cloud.resource.ResourceManager; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSVO; @@ -77,7 +78,8 @@ public class FirstFitAllocator implements HostAllocator { @Inject GuestOSDao _guestOSDao = null; @Inject GuestOSCategoryDao _guestOSCategoryDao = null; @Inject HypervisorCapabilitiesDao _hypervisorCapabilitiesDao = null; - @Inject VMInstanceDao _vmInstanceDao = null; + @Inject VMInstanceDao _vmInstanceDao = null; + @Inject ResourceManager _resourceMgr; float _factor = 1; protected String _allocationAlgorithm = "random"; @Inject CapacityManager _capacityMgr; @@ -115,7 +117,7 @@ public class FirstFitAllocator implements HostAllocator { List clusterHosts = new ArrayList(); if(hostTagOnOffering == null && hostTagOnTemplate == null){ - clusterHosts = _hostDao.listBy(type, clusterId, podId, dcId); + clusterHosts = _resourceMgr.listAllUpAndEnabledHosts(type, clusterId, podId, dcId); }else{ List hostsMatchingOfferingTag = new ArrayList(); List hostsMatchingTemplateTag = new ArrayList(); diff --git a/server/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java index 72f889ec3de..25347fa3e2a 100755 --- a/server/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java @@ -34,6 +34,7 @@ import com.cloud.host.Host.Type; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.offering.ServiceOffering; +import com.cloud.resource.ResourceManager; import com.cloud.uservm.UserVm; import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.VirtualMachine; @@ -44,6 +45,7 @@ public class RandomAllocator implements HostAllocator { private static final Logger s_logger = Logger.getLogger(RandomAllocator.class); private String _name; private HostDao _hostDao; + private ResourceManager _resourceMgr; @Override public List allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, @@ -78,7 +80,7 @@ public class RandomAllocator implements HostAllocator { if(hostTag != null){ hosts = _hostDao.listByHostTag(type, clusterId, podId, dcId, hostTag); }else{ - hosts = _hostDao.listBy(type, clusterId, podId, dcId); + hosts = _resourceMgr.listAllUpAndEnabledHosts(type, clusterId, podId, dcId); } s_logger.debug("Random Allocator found " + hosts.size() + " hosts"); @@ -126,6 +128,7 @@ public class RandomAllocator implements HostAllocator { public boolean configure(String name, Map params) { ComponentLocator locator = ComponentLocator.getCurrentLocator(); _hostDao = locator.getDao(HostDao.class); + _resourceMgr = locator.getManager(ResourceManager.class); if (_hostDao == null) { s_logger.error("Unable to get host dao."); return false; diff --git a/server/src/com/cloud/baremetal/BareMetalPingServiceImpl.java b/server/src/com/cloud/baremetal/BareMetalPingServiceImpl.java index 579e7047823..eb977712afa 100755 --- a/server/src/com/cloud/baremetal/BareMetalPingServiceImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalPingServiceImpl.java @@ -65,7 +65,7 @@ public class BareMetalPingServiceImpl extends BareMetalPxeServiceBase implements throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId); } - List pxeServers = _hostDao.listBy(Host.Type.PxeServer, null, podId, zoneId); + List pxeServers = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.PxeServer, null, podId, zoneId); if (pxeServers.size() != 0) { throw new InvalidParameterValueException("Already had a PXE server in Pod: " + podId + " zone: " + zoneId); } diff --git a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java old mode 100644 new mode 100755 index 4d2d5c1ffb7..b3a5eede4d3 --- a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java +++ b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java @@ -18,6 +18,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; +import com.cloud.resource.ResourceManager; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; @@ -34,6 +35,7 @@ import com.cloud.utils.exception.CloudRuntimeException; public class BareMetalTemplateAdapter extends TemplateAdapterBase implements TemplateAdapter { private final static Logger s_logger = Logger.getLogger(BareMetalTemplateAdapter.class); @Inject HostDao _hostDao; + @Inject ResourceManager _resourceMgr; @Override public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException { @@ -43,13 +45,13 @@ public class BareMetalTemplateAdapter extends TemplateAdapterBase implements Tem if (profile.getZoneId() == null || profile.getZoneId() == -1) { List dcs = _dcDao.listAllIncludingRemoved(); for (DataCenterVO dc : dcs) { - List pxeServers = _hostDao.listAllBy(Host.Type.PxeServer, dc.getId()); + List pxeServers = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.PxeServer, dc.getId()); if (pxeServers.size() == 0) { throw new CloudRuntimeException("Please add PXE server before adding baremetal template in zone " + dc.getName()); } } } else { - List pxeServers = _hostDao.listAllBy(Host.Type.PxeServer, profile.getZoneId()); + List pxeServers = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.PxeServer, profile.getZoneId()); if (pxeServers.size() == 0) { throw new CloudRuntimeException("Please add PXE server before adding baremetal template in zone " + profile.getZoneId()); } @@ -86,7 +88,7 @@ public class BareMetalTemplateAdapter extends TemplateAdapterBase implements Tem if (zoneId == null || zoneId == -1) { List dcs = _dcDao.listAllIncludingRemoved(); for (DataCenterVO dc : dcs) { - HostVO pxe = _hostDao.listAllBy(Host.Type.PxeServer, dc.getId()).get(0); + HostVO pxe = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.PxeServer, dc.getId()).get(0); vmTemplateHost = _tmpltHostDao.findByHostTemplate(dc.getId(), template.getId()); if (vmTemplateHost == null) { @@ -97,7 +99,7 @@ public class BareMetalTemplateAdapter extends TemplateAdapterBase implements Tem } } } else { - HostVO pxe = _hostDao.listAllBy(Host.Type.PxeServer, zoneId).get(0); + HostVO pxe = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.PxeServer, zoneId).get(0); vmTemplateHost = new VMTemplateHostVO(pxe.getId(), template.getId(), new Date(), 100, Status.DOWNLOADED, null, null, null, null, template.getUrl()); _tmpltHostDao.persist(vmTemplateHost); diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index 68e064a934c..6247308b527 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -58,12 +58,14 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; +import com.cloud.host.Host.HostAllocationState; import com.cloud.host.HostVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.org.Grouping; +import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.Storage; import com.cloud.storage.Storage.TemplateType; @@ -108,7 +110,8 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet StateListener { private static final Logger s_logger = Logger.getLogger(BareMetalVmManagerImpl.class); private ConfigurationDao _configDao; - @Inject PxeServerManager _pxeMgr; + @Inject PxeServerManager _pxeMgr; + @Inject ResourceManager _resourceMgr; @Inject (adapter=TemplateAdapter.class) protected Adapters _adapters; @@ -161,7 +164,7 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet throw new InvalidParameterValueException("Cannot find host with id " + hostId); } - List pxes = _hostDao.listBy(Host.Type.PxeServer, null, host.getPodId(), host.getDataCenterId()); + List pxes = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.PxeServer, null, host.getPodId(), host.getDataCenterId()); if (pxes.size() == 0) { throw new CloudRuntimeException("Please add PXE server in Pod before taking image"); } @@ -405,7 +408,7 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet long vmId = cmd.getEntityId(); UserVmVO vm = _vmDao.findById(vmId); - List servers = _hostDao.listBy(Host.Type.PxeServer, vm.getDataCenterIdToDeployIn()); + List servers = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Host.Type.PxeServer, vm.getDataCenterIdToDeployIn()); if (servers.size() == 0) { throw new CloudRuntimeException("Cannot find PXE server, please make sure there is one PXE server per zone"); } @@ -474,7 +477,7 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet } s_logger.debug("This is a PXE start, prepare PXE server first"); - List servers = _hostDao.listBy(Host.Type.PxeServer, vm.getDataCenterIdToDeployIn()); + List servers = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Host.Type.PxeServer, dest.getDataCenter().getId()); if (servers.size() == 0) { throw new CloudRuntimeException("Cannot find PXE server, please make sure there is one PXE server per zone"); } diff --git a/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java b/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java index 0dcade6643b..ce9843a65d3 100755 --- a/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java +++ b/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java @@ -126,7 +126,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta throw new InvalidParameterValueException("Could not find pod with ID: " + podId); } - List dhcps = _hostDao.listBy(Host.Type.ExternalDhcp, null, podId, zoneId); + List dhcps = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.ExternalDhcp, null, podId, zoneId); if (dhcps.size() != 0) { throw new InvalidParameterValueException("Already had a DHCP server in Pod: " + podId + " zone: " + zoneId); } @@ -194,7 +194,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta return; } - List servers = _hostDao.listBy(Host.Type.PxeServer, null, vm.getPodIdToDeployIn(), vm.getDataCenterIdToDeployIn()); + List servers = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.PxeServer, null, vm.getPodIdToDeployIn(), vm.getDataCenterIdToDeployIn()); if (servers.size() != 1) { throw new CloudRuntimeException("Wrong number of PXE server found in zone " + vm.getDataCenterIdToDeployIn() + " Pod " + vm.getPodIdToDeployIn() + ", number is " + servers.size()); @@ -209,7 +209,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta ReservationContext context) throws ResourceUnavailableException { Long zoneId = profile.getVirtualMachine().getDataCenterIdToDeployIn(); Long podId = profile.getVirtualMachine().getPodIdToDeployIn(); - List hosts = _hostDao.listBy(Type.ExternalDhcp, null, podId, zoneId); + List hosts = _resourceMgr.listAllUpAndEnabledHosts(Type.ExternalDhcp, null, podId, zoneId); if (hosts.size() == 0) { throw new CloudRuntimeException("No external Dhcp found in zone " + zoneId + " pod " + podId); } diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java b/server/src/com/cloud/capacity/CapacityManagerImpl.java index 31ec150d6c4..7af26f18260 100755 --- a/server/src/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/com/cloud/capacity/CapacityManagerImpl.java @@ -46,6 +46,7 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.offering.ServiceOffering; +import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.utils.DateUtil; @@ -78,6 +79,8 @@ public class CapacityManagerImpl implements CapacityManager, StateListener hosts = _hostDao.listByType(Host.Type.Routing); + List hosts = _resourceMgr.listAllHostsInAllZonesByType(Host.Type.Routing); for (HostVO host : hosts) { updateCapacityForHost(host); } diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java b/server/src/com/cloud/cluster/ClusterManagerImpl.java index d44ad338583..a3d32fef3f9 100755 --- a/server/src/com/cloud/cluster/ClusterManagerImpl.java +++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java @@ -57,6 +57,7 @@ import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.OperationTimedoutException; +import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status.Event; import com.cloud.host.dao.HostDao; @@ -73,6 +74,8 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.ConnectionConcierge; import com.cloud.utils.db.DB; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.db.Transaction; import com.cloud.utils.events.SubscriptionMgr; import com.cloud.utils.exception.CloudRuntimeException; @@ -619,8 +622,14 @@ public class ClusterManagerImpl implements ClusterManager { //initiate agent lb task will be scheduled and executed only once, and only when number of agents loaded exceeds _connectedAgentsThreshold if (_agentLBEnabled && !_agentLbHappened) { - List allManagedRoutingAgents = _hostDao.listManagedRoutingAgents(); - List allAgents = _hostDao.listAllRoutingAgents(); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getManagementServerId(), Op.NNULL); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + List allManagedRoutingAgents = sc.list(); + + sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + List allAgents = sc.list(); double allHostsCount = allAgents.size(); double managedHostsCount = allManagedRoutingAgents.size(); if (allHostsCount > 0.0) { diff --git a/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java b/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java old mode 100644 new mode 100755 index d8075ece657..2802fef1861 --- a/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java +++ b/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java @@ -30,10 +30,13 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; +import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.utils.component.Inject; +import com.cloud.utils.db.SearchCriteria2; +import com.cloud.utils.db.SearchCriteria.Op; @Local(value=AgentLoadBalancerPlanner.class) @@ -66,14 +69,21 @@ public class ClusterBasedAgentLoadBalancerPlanner implements AgentLoadBalancerPl @Override public List getHostsToRebalance(long msId, int avLoad) { - List allHosts = _hostDao.listRoutingHostsByManagementServer(msId); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + sc.addAnd(sc.getEntity().getManagementServerId(), Op.EQ, msId); + List allHosts = sc.list(); if (allHosts.size() <= avLoad) { s_logger.debug("Agent load = " + allHosts.size() + " for management server " + msId + " doesn't exceed average system agent load = " + avLoad + "; so it doesn't participate in agent rebalancing process"); return null; } - List directHosts = _hostDao.listDirectHostsBy(msId, Status.Up); + sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getManagementServerId(), Op.EQ, msId); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up); + List directHosts = sc.list(); + if (directHosts.isEmpty()) { s_logger.debug("No direct agents in status " + Status.Up + " exist for the management server " + msId + "; so it doesn't participate in agent rebalancing process"); return null; diff --git a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java old mode 100644 new mode 100755 index 420570fde58..9b2ab660aa6 --- a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java @@ -27,6 +27,7 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.host.Host.Type; import com.cloud.host.HostVO; import com.cloud.info.ConsoleProxyInfo; +import com.cloud.resource.ResourceManager; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.vm.VMInstanceVO; @@ -36,11 +37,12 @@ import com.cloud.vm.dao.ConsoleProxyDao; public class StaticConsoleProxyManager extends AgentBasedConsoleProxyManager implements ConsoleProxyManager { String _ip = null; @Inject ConsoleProxyDao _proxyDao; + @Inject ResourceManager _resourceMgr; @Override protected HostVO findHost(VMInstanceVO vm) { - List hosts = _hostDao.listBy(Type.ConsoleProxy, vm.getDataCenterIdToDeployIn()); + List hosts = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Type.ConsoleProxy, vm.getDataCenterIdToDeployIn()); return hosts.isEmpty() ? null : hosts.get(0); } diff --git a/server/src/com/cloud/deploy/BareMetalPlanner.java b/server/src/com/cloud/deploy/BareMetalPlanner.java old mode 100644 new mode 100755 index 247965388a5..bc34af9e4b7 --- a/server/src/com/cloud/deploy/BareMetalPlanner.java +++ b/server/src/com/cloud/deploy/BareMetalPlanner.java @@ -42,6 +42,7 @@ import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; +import com.cloud.resource.ResourceManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.Inject; import com.cloud.utils.exception.CloudRuntimeException; @@ -57,6 +58,7 @@ public class BareMetalPlanner implements DeploymentPlanner { @Inject protected HostDao _hostDao; @Inject protected ConfigurationDao _configDao; @Inject protected CapacityManager _capacityMgr; + @Inject protected ResourceManager _resourceMgr; String _name; @Override @@ -94,7 +96,7 @@ public class BareMetalPlanner implements DeploymentPlanner { int cpu_requested; long ram_requested; HostVO target = null; - List hosts = _hostDao.listByCluster(cluster.getId()); + List hosts = _resourceMgr.listAllHostsInCluster(cluster.getId()); if (hostTag != null) { for (HostVO h : hosts) { _hostDao.loadDetails(h); diff --git a/server/src/com/cloud/ha/AbstractInvestigatorImpl.java b/server/src/com/cloud/ha/AbstractInvestigatorImpl.java old mode 100644 new mode 100755 index 238063bc406..78ef0a1f4f3 --- a/server/src/com/cloud/ha/AbstractInvestigatorImpl.java +++ b/server/src/com/cloud/ha/AbstractInvestigatorImpl.java @@ -33,9 +33,13 @@ import com.cloud.agent.api.PingTestCommand; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.OperationTimedoutException; import com.cloud.host.Host.Type; +import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; +import com.cloud.resource.ResourceManager; import com.cloud.utils.component.Inject; +import com.cloud.utils.db.SearchCriteria2; +import com.cloud.utils.db.SearchCriteria.Op; public abstract class AbstractInvestigatorImpl implements Investigator { private static final Logger s_logger = Logger.getLogger(AbstractInvestigatorImpl.class); @@ -43,6 +47,7 @@ public abstract class AbstractInvestigatorImpl implements Investigator { private String _name = null; @Inject private HostDao _hostDao = null; @Inject private AgentManager _agentMgr = null; + @Inject private ResourceManager _resourceMgr = null; @Override @@ -69,7 +74,12 @@ public abstract class AbstractInvestigatorImpl implements Investigator { // Host.status is up and Host.type is routing protected List findHostByPod(long podId, Long excludeHostId) { - List hostIds = _hostDao.listBy(null, podId, null, Type.Routing, Status.Up); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Type.Routing); + sc.addAnd(sc.getEntity().getPodId(), Op.EQ, podId); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up); + List hostIds = sc.list(); + if (excludeHostId != null){ hostIds.remove(excludeHostId); } diff --git a/server/src/com/cloud/ha/KVMFencer.java b/server/src/com/cloud/ha/KVMFencer.java old mode 100644 new mode 100755 index 25f9967bbde..9f6804aeda1 --- a/server/src/com/cloud/ha/KVMFencer.java +++ b/server/src/com/cloud/ha/KVMFencer.java @@ -36,6 +36,7 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; import com.cloud.utils.component.Inject; import com.cloud.vm.VMInstanceVO; @@ -46,6 +47,7 @@ public class KVMFencer implements FenceBuilder { @Inject HostDao _hostDao; @Inject AgentManager _agentMgr; + @Inject ResourceManager _resourceMgr; @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -82,7 +84,7 @@ public class KVMFencer implements FenceBuilder { return null; } - List hosts = _hostDao.listByCluster(host.getClusterId()); + List hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); FenceCommand fence = new FenceCommand(vm, host); for (HostVO h : hosts) { diff --git a/server/src/com/cloud/ha/XenServerFencer.java b/server/src/com/cloud/ha/XenServerFencer.java old mode 100644 new mode 100755 index d38e5de261d..8acb39920a6 --- a/server/src/com/cloud/ha/XenServerFencer.java +++ b/server/src/com/cloud/ha/XenServerFencer.java @@ -35,6 +35,7 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; import com.cloud.utils.component.Inject; import com.cloud.vm.VMInstanceVO; @@ -45,6 +46,7 @@ public class XenServerFencer implements FenceBuilder { @Inject HostDao _hostDao; @Inject AgentManager _agentMgr; + @Inject ResourceManager _resourceMgr; @Override public Boolean fenceOff(VMInstanceVO vm, HostVO host) { @@ -53,7 +55,7 @@ public class XenServerFencer implements FenceBuilder { return null; } - List hosts = _hostDao.listByCluster(host.getClusterId()); + List hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); FenceCommand fence = new FenceCommand(vm, host); for (HostVO h : hosts) { diff --git a/server/src/com/cloud/ha/XenServerInvestigator.java b/server/src/com/cloud/ha/XenServerInvestigator.java old mode 100644 new mode 100755 index 57d70e1e06a..56a93e06572 --- a/server/src/com/cloud/ha/XenServerInvestigator.java +++ b/server/src/com/cloud/ha/XenServerInvestigator.java @@ -31,6 +31,7 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.Inject; import com.cloud.vm.VMInstanceVO; @@ -40,6 +41,7 @@ public class XenServerInvestigator extends AdapterBase implements Investigator { private final static Logger s_logger = Logger.getLogger(XenServerInvestigator.class); @Inject HostDao _hostDao; @Inject AgentManager _agentMgr; + @Inject ResourceManager _resourceMgr; protected XenServerInvestigator() { } @@ -51,7 +53,7 @@ public class XenServerInvestigator extends AdapterBase implements Investigator { } CheckOnHostCommand cmd = new CheckOnHostCommand(agent); - List neighbors = _hostDao.listByCluster(agent.getClusterId()); + List neighbors = _resourceMgr.listAllHostsInCluster(agent.getClusterId()); for (HostVO neighbor : neighbors) { if (neighbor.getId() == agent.getId() || neighbor.getHypervisorType() != HypervisorType.XenServer) { continue; diff --git a/server/src/com/cloud/host/dao/HostDao.java b/server/src/com/cloud/host/dao/HostDao.java index f2e632219bd..15eaa19a1b4 100755 --- a/server/src/com/cloud/host/dao/HostDao.java +++ b/server/src/com/cloud/host/dao/HostDao.java @@ -35,18 +35,8 @@ import com.cloud.utils.fsm.StateDao; * Data Access Object for server * */ -public interface HostDao extends GenericDao, StateDao { - List listBy(Host.Type type, Long clusterId, Long podId, long dcId); - +public interface HostDao extends GenericDao, StateDao { long countBy(long clusterId, ResourceState... states); - - List listByDataCenter(long dcId); - List listByHostPod(long podId); - List listByStatus(Status... status); - List listByResourceState(ResourceState...states); - List listBy(Host.Type type, long dcId); - List listAllBy(Host.Type type, long dcId); - List listByCluster(long clusterId); /** * Mark all hosts associated with a certain management server @@ -60,37 +50,12 @@ public interface HostDao extends GenericDao, StateDao findHostsLike(String hostName); - /** - * Find hosts that are directly connected. - */ - List findDirectlyConnectedHosts(); - List findAndUpdateDirectAgentToLoad(long lastPingSecondsAfter, Long limit, long managementServerId); - HostVO findByStorageIpAddressInDataCenter(long dcId, String privateIpAddress); - HostVO findByPrivateIpAddressInDataCenter(long dcId, String privateIpAddress); - public HostVO findByGuid(String guid); public HostVO findByName(String name); - - /** - * find all hosts of a certain type in a data center - * @param type - * @param routingCapable - * @param dcId - * @return - */ - List listByTypeDataCenter(Host.Type type, long dcId); - - /** - * find all hosts of a particular type - * @param type - * @return - */ - List listByType(Type type); - List getRunningHostCounts(Date cutTime); long getNextSequence(long hostId); @@ -101,46 +66,15 @@ public interface HostDao extends GenericDao, StateDao getAvailHypervisorInZone(Long hostId, Long zoneId); - - /** - * Returns a list of host ids given the conditions. - * @param dataCenterId if specified, then must be in this data center. - * @param podId if specified, then must be in this pod. - * @param clusterId if specified, then must be in this cluster. - * @param hostType TODO - * @param statuses the host needs to be in. - * @return ids of the host meeting the search parameters. - */ - List listBy(Long dataCenterId, Long podId, Long clusterId, Type hostType, Status... statuses); - - List listBy(Long clusterId, Long podId, long dcId); - void loadHostTags(HostVO host); List listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag); long countRoutingHostsByDataCenter(long dcId); - - List listDirectHostsBy(long msId, Status status); - - List listManagedDirectAgents(); - - List listManagedRoutingAgents(); - + HostVO findTrafficMonitorHost(); - List listRoutingHostsByManagementServer(long msId); - - List listSecondaryStorageVM(long dcId); - - List listAllRoutingAgents(); - List findAndUpdateApplianceToLoad(long lastPingSecondsAfter, long managementServerId); - List listByInAllStatus(Type type, Long clusterId, Long podId, long dcId); - - List listByClusterStatus(long clusterId, Status status); - boolean updateResourceState(ResourceState oldState, ResourceState.Event event, ResourceState newState, Host vo); } diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index 3ff1fb1b329..f78c42b8b26 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -248,7 +248,6 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao UnmanagedDirectConnectSearch.done(); - DirectConnectSearch = createSearchBuilder(); DirectConnectSearch.and("resource", DirectConnectSearch.entity().getResource(), SearchCriteria.Op.NNULL); DirectConnectSearch.and("id", DirectConnectSearch.entity().getId(), SearchCriteria.Op.EQ); @@ -321,13 +320,6 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return hosts.size(); } - @Override - public List findDirectlyConnectedHosts() { - SearchCriteria sc = DirectlyConnectedSearch.create(); - sc.setParameters("resourceState", ResourceState.Disabled); - return search(sc, null); - } - @Override @DB public List findAndUpdateDirectAgentToLoad(long lastPingSecondsAfter, Long limit, long managementServerId) { Transaction txn = Transaction.currentTxn(); @@ -391,56 +383,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao ub = getUpdateBuilder(host); update(ub, sc, null); } - - @Override - public List listBy(Host.Type type, Long clusterId, Long podId, long dcId) { - SearchCriteria sc = TypePodDcStatusSearch.create(); - if (type != null) { - sc.setParameters("type", type.toString()); - } - if (clusterId != null) { - sc.setParameters("cluster", clusterId); - } - if (podId != null) { - sc.setParameters("pod", podId); - } - sc.setParameters("dc", dcId); - sc.setParameters("status", Status.Up.toString()); - sc.setParameters("resourceState", ResourceState.Enabled.toString()); - - return listBy(sc); - } - - @Override - public List listByInAllStatus(Host.Type type, Long clusterId, Long podId, long dcId) { - SearchCriteria sc = TypePodDcStatusSearch.create(); - if ( type != null ) { - sc.setParameters("type", type.toString()); - } - if (clusterId != null) { - sc.setParameters("cluster", clusterId); - } - if (podId != null ) { - sc.setParameters("pod", podId); - } - sc.setParameters("dc", dcId); - - return listBy(sc); - } - - @Override - public List listBy(Long clusterId, Long podId, long dcId) { - SearchCriteria sc = TypePodDcStatusSearch.create(); - if (podId != null) { - sc.setParameters("pod", podId); - } - if (clusterId != null) { - sc.setParameters("cluster", clusterId); - } - sc.setParameters("dc", dcId); - return listBy(sc); - } - + @Override public List listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag) { @@ -473,66 +416,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return listBy(sc); } - - @Override - public List listByCluster(long clusterId) { - SearchCriteria sc = ClusterStatusSearch.create(); - - sc.setParameters("cluster", clusterId); - - return listBy(sc); - } - - @Override - public List listByClusterStatus(long clusterId, Status status) { - SearchCriteria sc = ClusterStatusSearch.create(); - - sc.setParameters("cluster", clusterId); - sc.setParameters("status", status.toString()); - - return listBy(sc); - } - - - @Override - public List listBy(Host.Type type, long dcId) { - SearchCriteria sc = TypeDcStatusSearch.create(); - sc.setParameters("type", type.toString()); - sc.setParameters("dc", dcId); - sc.setParameters("status", Status.Up.toString()); - sc.setParameters("resourceState", ResourceState.Enabled.toString()); - - return listBy(sc); - } - - @Override - public List listAllBy(Host.Type type, long dcId) { - SearchCriteria sc = TypeDcSearch.create(); - sc.setParameters("type", type.toString()); - sc.setParameters("dc", dcId); - - return listBy(sc); - } - - @Override - public HostVO findByPrivateIpAddressInDataCenter(long dcId, String privateIpAddress) { - SearchCriteria sc = DcPrivateIpAddressSearch.create(); - sc.setParameters("dc", dcId); - sc.setParameters("privateIpAddress", privateIpAddress); - - return findOneBy(sc); - } - - @Override - public HostVO findByStorageIpAddressInDataCenter(long dcId, String privateIpAddress) { - SearchCriteria sc = DcStorageIpAddressSearch.create(); - sc.setParameters("dc", dcId); - sc.setParameters("storageIpAddress", privateIpAddress); - - return findOneBy(sc); - } - @Override public void loadDetails(HostVO host) { Map details = _detailsDao.findDetails(host.getId()); @@ -596,14 +480,6 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return listBy(sc); } - - - @Override - public List listByDataCenter(long dcId) { - SearchCriteria sc = DcSearch.create("dc", dcId); - return listBy(sc); - } - @Override public HostVO findConsoleProxyHost(String name, Type type) { SearchCriteria sc = ConsoleProxyHostSearch.create(); @@ -617,54 +493,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return hostList.get(0); } } - - @Override - public List listByHostPod(long podId) { - SearchCriteria sc = PodSearch.create("pod", podId); - return listBy(sc); - } - - @Override - public List listByStatus(Status... status) { - SearchCriteria sc = StatusSearch.create(); - sc.setParameters("status", (Object[]) status); - return listBy(sc); - } - @Override - public List listByResourceState(ResourceState... states) { - SearchCriteria sc = ResourceStateSearch.create(); - sc.setParameters("resourceState", (Object[]) states); - return listBy(sc); - } - - - @Override - public List listByTypeDataCenter(Type type, long dcId) { - SearchCriteria sc = TypeDcSearch.create(); - sc.setParameters("type", type.toString()); - sc.setParameters("dc", dcId); - - return listBy(sc); - } - - @Override - public List listSecondaryStorageVM(long dcId) { - SearchCriteria sc = SecondaryStorageVMSearch.create(); - sc.setParameters("type", Type.SecondaryStorageVM); - sc.setParameters("status", Status.Up); - sc.setParameters("dc", dcId); - - return listBy(sc); - } - - @Override - public List listByType(Type type) { - SearchCriteria sc = TypeSearch.create(); - sc.setParameters("type", type.toString()); - return listBy(sc); - } - @Override public void saveDetails(HostVO host) { Map details = host.getDetails(); @@ -775,48 +604,6 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return s_seqFetcher.getNextSequence(Long.class, tg, hostId); } - @Override - public List getAvailHypervisorInZone(Long hostId, Long zoneId) { - SearchCriteria sc = AvailHypevisorInZone.create(); - if ( zoneId != null ) { - sc.setParameters("zoneId", zoneId); - } - if ( hostId != null ) { - sc.setParameters("hostId", hostId); - } - sc.setParameters("type", Host.Type.Routing); - List hosts = listBy(sc); - List hypers = new ArrayList(4); - for (HostVO host : hosts) { - hypers.add(host.getHypervisorType()); - } - return hypers; - } - - @Override - public List listBy(Long dataCenterId, Long podId, Long clusterId, Type hostType, Status... statuses) { - SearchCriteria sc = HostsInStatusSearch.create(); - if (dataCenterId != null) { - sc.setParameters("dc", dataCenterId); - } - - if (podId != null) { - sc.setParameters("pod", podId); - } - - if (clusterId != null) { - sc.setParameters("cluster", clusterId); - } - - if (hostType != null) { - sc.setParameters("type", hostType); - } - - sc.setParameters("statuses", (Object[]) statuses); - - return customSearch(sc, null); - } - /*TODO: this is used by mycloud, check if it needs resource state Enabled */ @Override public long countRoutingHostsByDataCenter(long dcId) { @@ -840,46 +627,6 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao } } - @Override - public List listDirectHostsBy(long msId, Status status) { - SearchCriteria sc = DirectlyConnectedSearch.create(); - sc.setParameters("ms", msId); - if (status != null) { - sc.setParameters("statuses", Status.Up); - } - - return listBy(sc); - } - - @Override - public List listManagedDirectAgents() { - SearchCriteria sc = ManagedDirectConnectSearch.create(); - return listBy(sc); - } - - @Override - public List listManagedRoutingAgents() { - SearchCriteria sc = ManagedRoutingServersSearch.create(); - sc.setParameters("type", Type.Routing); - return listBy(sc); - } - - @Override - public List listRoutingHostsByManagementServer(long msId) { - SearchCriteria sc = MsStatusSearch.create(); - sc.setParameters("ms", msId); - sc.setParameters("type", Type.Routing); - - return listBy(sc); - } - - @Override - public List listAllRoutingAgents() { - SearchCriteria sc = RoutingSearch.create(); - sc.setParameters("type", Type.Routing); - return listBy(sc); - } - @Override public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Long id) { HostVO host = (HostVO) vo; diff --git a/server/src/com/cloud/hypervisor/hyperv/HypervServerDiscoverer.java b/server/src/com/cloud/hypervisor/hyperv/HypervServerDiscoverer.java index 4369deea3f9..ad05270bad8 100755 --- a/server/src/com/cloud/hypervisor/hyperv/HypervServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/hyperv/HypervServerDiscoverer.java @@ -48,6 +48,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.hyperv.resource.HypervDummyResourceBase; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; +import com.cloud.resource.ResourceManager; import com.cloud.resource.ServerResource; import com.cloud.utils.component.Inject; import com.cloud.utils.nio.HandlerFactory; @@ -65,6 +66,7 @@ public class HypervServerDiscoverer extends DiscovererBase implements Discoverer @Inject AlertManager _alertMgr; @Inject ClusterDetailsDao _clusterDetailsDao; @Inject HostDao _hostDao = null; + @Inject ResourceManager _resourceMgr; Link _link; @SuppressWarnings("static-access") @@ -204,7 +206,7 @@ public class HypervServerDiscoverer extends DiscovererBase implements Discoverer private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) { for (int i = 0; i < _waitTime *2; i++) { - List hosts = _hostDao.listBy(Host.Type.Routing, clusterId, podId, dcId); + List hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId); for (HostVO host : hosts) { if (host.getGuid().equalsIgnoreCase(guid)) { return host; diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index cfdf93f0e2e..bfaaf141a66 100755 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -231,7 +231,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) { for (int i = 0; i < _waitTime *2; i++) { - List hosts = _hostDao.listBy(Host.Type.Routing, clusterId, podId, dcId); + List hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId); for (HostVO host : hosts) { if (host.getGuid().equalsIgnoreCase(guid)) { return host; @@ -315,7 +315,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, /* KVM requires host are the same in cluster */ ClusterVO clusterVO = _clusterDao.findById(host.getClusterId()); - List hostsInCluster = _hostDao.listByCluster(clusterVO.getId()); + List hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId()); if (!hostsInCluster.isEmpty()) { HostVO oneHost = hostsInCluster.get(0); _hostDao.loadDetails(oneHost); diff --git a/server/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/server/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index 1fc3f55ce85..8c29de6ce3c 100755 --- a/server/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -84,7 +84,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer return null; } - List hosts = _hostDao.listByCluster(clusterId); + List hosts = _resourceMgr.listAllHostsInCluster(clusterId); if(hosts.size() >= _vmwareMgr.getMaxHostsPerCluster()) { String msg = "VMware cluster " + cluster.getName() + " is too big to add new host now. (current configured cluster size: " + _vmwareMgr.getMaxHostsPerCluster() + ")"; s_logger.error(msg); diff --git a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java index ea52f9791f3..b890d7816a9 100755 --- a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java @@ -151,7 +151,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L } try { - List eHosts = _hostDao.listByCluster(clusterId); + List eHosts = _resourceMgr.listAllHostsInCluster(clusterId); if( eHosts.size() > 0 ) { HostVO eHost = eHosts.get(0); _hostDao.loadDetails(eHost); @@ -180,7 +180,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L if ( clu.getGuid()== null ) { clu.setGuid(poolUuid); } else { - List clusterHosts = _hostDao.listByCluster(clusterId); + List clusterHosts = _resourceMgr.listAllHostsInCluster(clusterId); if( clusterHosts != null && clusterHosts.size() > 0) { if (!clu.getGuid().equals(poolUuid)) { if (hosts.size() == 1) { @@ -348,7 +348,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L protected boolean addHostsToPool(Connection conn, String hostIp, Long clusterId) throws XenAPIException, XmlRpcException, DiscoveryException { List hosts; - hosts = _hostDao.listByCluster(clusterId); + hosts = _resourceMgr.listAllHostsInCluster(clusterId); String masterIp = null; String username = null; diff --git a/server/src/com/cloud/migration/Db21to22MigrationUtil.java b/server/src/com/cloud/migration/Db21to22MigrationUtil.java old mode 100644 new mode 100755 index 906ecaa58a3..a66840e120c --- a/server/src/com/cloud/migration/Db21to22MigrationUtil.java +++ b/server/src/com/cloud/migration/Db21to22MigrationUtil.java @@ -43,6 +43,7 @@ import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.xen.resource.XenServerConnectionPool; +import com.cloud.resource.ResourceManager; import com.cloud.user.Account; import com.cloud.user.dao.AccountDao; import com.cloud.utils.PropertiesUtil; @@ -68,6 +69,7 @@ public class Db21to22MigrationUtil { private InstanceGroupVMMapDao _groupVMMapDao; private ConfigurationDao _configurationDao; private DataCenterDao _zoneDao; + private ResourceManager _resourceMgr; private void doMigration() { setupComponents(); @@ -88,7 +90,7 @@ public class Db21to22MigrationUtil { XenServerConnectionPool _connPool = XenServerConnectionPool.getInstance(); List clusters = _clusterDao.listByHyTypeWithoutGuid(HypervisorType.XenServer.toString()); for (ClusterVO cluster : clusters) { - List hosts = _hostDao.listByCluster(cluster.getId()); + List hosts = _resourceMgr.listAllHostsInCluster(cluster.getId()); for (HostVO host : hosts) { String ip = host.getPrivateIpAddress(); String username = host.getDetail("username"); @@ -179,6 +181,7 @@ public class Db21to22MigrationUtil { _groupVMMapDao = locator.getDao(InstanceGroupVMMapDao.class); _configurationDao = locator.getDao(ConfigurationDao.class); _zoneDao = locator.getDao(DataCenterDao.class); + _resourceMgr = locator.getManager(ResourceManager.class); } private void setupInstanceGroups() { diff --git a/server/src/com/cloud/network/ExternalNetworkManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkManagerImpl.java index fe5eaf9a21c..862bf64bf1d 100755 --- a/server/src/com/cloud/network/ExternalNetworkManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkManagerImpl.java @@ -201,7 +201,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou s_logger.debug("Zone " + zone.getName() + " is not configured for external networking."); return null; } else { - List externalNetworkAppliancesInZone = _hostDao.listBy(type, zoneId); + List externalNetworkAppliancesInZone = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(type, zoneId); if (externalNetworkAppliancesInZone.size() != 1) { return null; } else { @@ -225,7 +225,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou zoneName = zone.getName(); } - List externalLoadBalancersInZone = _hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId); + List externalLoadBalancersInZone = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalLoadBalancer, zoneId); if (externalLoadBalancersInZone.size() != 0) { throw new InvalidParameterValueException("Already found an external load balancer in zone: " + zoneName); } @@ -340,7 +340,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou @Override public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd) { long zoneId = cmd.getZoneId(); - return _hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId); + return _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalLoadBalancer, zoneId); } @Override @@ -542,7 +542,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou zoneName = zone.getName(); } - List externalFirewallsInZone = _hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId); + List externalFirewallsInZone = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalFirewall, zoneId); if (externalFirewallsInZone.size() != 0) { throw new InvalidParameterValueException("Already added an external firewall in zone: " + zoneName); } @@ -717,7 +717,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou @Override public List listExternalFirewalls(ListExternalFirewallsCmd cmd) { long zoneId = cmd.getZoneId(); - return _hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId); + return _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalFirewall, zoneId); } @Override diff --git a/server/src/com/cloud/network/F5BigIpManagerImpl.java b/server/src/com/cloud/network/F5BigIpManagerImpl.java index f596b271150..9fcd3c62b67 100755 --- a/server/src/com/cloud/network/F5BigIpManagerImpl.java +++ b/server/src/com/cloud/network/F5BigIpManagerImpl.java @@ -39,6 +39,7 @@ import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.resource.F5BigIpResource; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.resource.ResourceManager; import com.cloud.server.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -72,6 +73,8 @@ public class F5BigIpManagerImpl extends ExternalNetworkManagerImpl implements Ex ConfigurationManager _configMgr; @Inject AccountManager _accountMgr; + @Inject + ResourceManager _resourcMgr; private static final org.apache.log4j.Logger s_logger = Logger.getLogger(F5BigIpManagerImpl.class); @@ -87,7 +90,7 @@ public class F5BigIpManagerImpl extends ExternalNetworkManagerImpl implements Ex zoneName = zone.getName(); } - List externalLoadBalancersInZone = _hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId); + List externalLoadBalancersInZone = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalLoadBalancer, zoneId); if (externalLoadBalancersInZone.size() != 0) { throw new InvalidParameterValueException("Already found an external load balancer in zone: " + zoneName); } @@ -183,7 +186,7 @@ public class F5BigIpManagerImpl extends ExternalNetworkManagerImpl implements Ex @Override public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd) { long zoneId = cmd.getZoneId(); - return _hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId); + return _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalLoadBalancer, zoneId); } @Override diff --git a/server/src/com/cloud/network/JuniperSrxManagerImpl.java b/server/src/com/cloud/network/JuniperSrxManagerImpl.java index 15094f211ad..1803b0698bf 100755 --- a/server/src/com/cloud/network/JuniperSrxManagerImpl.java +++ b/server/src/com/cloud/network/JuniperSrxManagerImpl.java @@ -96,7 +96,7 @@ public class JuniperSrxManagerImpl extends ExternalNetworkManagerImpl implements zoneName = zone.getName(); } - List externalFirewallsInZone = _hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId); + List externalFirewallsInZone = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalFirewall, zoneId); if (externalFirewallsInZone.size() != 0) { throw new InvalidParameterValueException("Already added an external firewall in zone: " + zoneName); } @@ -265,7 +265,7 @@ public class JuniperSrxManagerImpl extends ExternalNetworkManagerImpl implements @Override public List listExternalFirewalls(ListExternalFirewallsCmd cmd) { long zoneId = cmd.getZoneId(); - return _hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId); + return _resourceMgr.listAllHostsInOneZoneByType(Host.Type.ExternalFirewall, zoneId); } @Override diff --git a/server/src/com/cloud/network/NetworkDeviceManagerImpl.java b/server/src/com/cloud/network/NetworkDeviceManagerImpl.java old mode 100644 new mode 100755 index 222c6f2f3a6..5027ccb486c --- a/server/src/com/cloud/network/NetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/NetworkDeviceManagerImpl.java @@ -25,6 +25,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; +import com.cloud.resource.ResourceManager; import com.cloud.server.api.response.NetworkDeviceResponse; import com.cloud.server.api.response.NwDeviceDhcpResponse; import com.cloud.server.api.response.PxePingResponse; @@ -38,6 +39,7 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager { @Inject ExternalDhcpManager _dhcpMgr; @Inject PxeServerManager _pxeMgr; @Inject HostDao _hostDao; + @Inject ResourceManager _resourceMgr; @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -137,14 +139,14 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager { private List listNetworkDevice(Long zoneId, Long podId, Host.Type type) { List res = new ArrayList(); if (podId != null) { - List devs = _hostDao.listBy(type, null, podId, zoneId); + List devs = _resourceMgr.listAllUpAndEnabledHosts(type, null, podId, zoneId); if (devs.size() == 1) { res.add(devs.get(0)); } else { s_logger.debug("List " + type + ": " + devs.size() + " found"); } } else { - List devs = _hostDao.listBy(type, zoneId); + List devs = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(type, zoneId); res.addAll(devs); } diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/com/cloud/network/NetworkUsageManagerImpl.java index f9235c9fdc8..3997c64a1ce 100755 --- a/server/src/com/cloud/network/NetworkUsageManagerImpl.java +++ b/server/src/com/cloud/network/NetworkUsageManagerImpl.java @@ -127,7 +127,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta } - List trafficMonitorsInZone = _hostDao.listByTypeDataCenter(Host.Type.TrafficMonitor, zoneId); + List trafficMonitorsInZone = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.TrafficMonitor, zoneId); if (trafficMonitorsInZone.size() != 0) { throw new InvalidParameterValueException("Already added an traffic monitor in zone: " + zoneName); } @@ -198,7 +198,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta @Override public List listTrafficMonitors(ListTrafficMonitorsCmd cmd) { long zoneId = cmd.getZoneId(); - return _hostDao.listByTypeDataCenter(Host.Type.TrafficMonitor, zoneId); + return _resourceMgr.listAllHostsInOneZoneByType(Host.Type.TrafficMonitor, zoneId); } @Override diff --git a/server/src/com/cloud/network/ovs/OvsListener.java b/server/src/com/cloud/network/ovs/OvsListener.java index 3e05c35f1f8..9fcbdad96b1 100755 --- a/server/src/com/cloud/network/ovs/OvsListener.java +++ b/server/src/com/cloud/network/ovs/OvsListener.java @@ -44,6 +44,8 @@ import com.cloud.network.ovs.dao.OvsWorkDao; import com.cloud.network.ovs.dao.OvsWorkVO.Step; import com.cloud.network.ovs.dao.VlanMappingDao; import com.cloud.network.ovs.dao.VlanMappingVO; +import com.cloud.resource.ResourceManager; +import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; public class OvsListener implements Listener { @@ -53,6 +55,7 @@ public class OvsListener implements Listener { GreTunnelDao _tunnelDao; VlanMappingDao _mappingDao; HostDao _hostDao; + ResourceManager _resourceMgr; public OvsListener(OvsNetworkManager ovsMgr, OvsWorkDao workDao, GreTunnelDao tunnelDao, VlanMappingDao mappingDao, HostDao hostDao) { @@ -61,6 +64,8 @@ public class OvsListener implements Listener { this._tunnelDao = tunnelDao; this._mappingDao = mappingDao; this._hostDao = hostDao; + ComponentLocator locator = ComponentLocator.getLocator("management-server"); + _resourceMgr = locator.getManager(ResourceManager.class); } @Override @@ -131,7 +136,7 @@ public class OvsListener implements Listener { } try { - List hosts = _hostDao.listByType(Host.Type.Routing); + List hosts = _resourceMgr.listAllHostsInAllZonesByType(Host.Type.Routing); for (HostVO h : hosts) { if (h.getId() == host.getId()) { continue; diff --git a/server/src/com/cloud/network/ovs/OvsTunnelListener.java b/server/src/com/cloud/network/ovs/OvsTunnelListener.java index 92093cad0d5..5d17a8cedc4 100755 --- a/server/src/com/cloud/network/ovs/OvsTunnelListener.java +++ b/server/src/com/cloud/network/ovs/OvsTunnelListener.java @@ -38,15 +38,20 @@ import com.cloud.host.dao.HostDao; import com.cloud.network.ovs.dao.GreTunnelVO; import com.cloud.network.ovs.dao.OvsTunnelDao; import com.cloud.network.ovs.dao.OvsTunnelVO; +import com.cloud.resource.ResourceManager; +import com.cloud.utils.component.ComponentLocator; public class OvsTunnelListener implements Listener { public static final Logger s_logger = Logger.getLogger(OvsListener.class.getName()); HostDao _hostDao; OvsTunnelDao _tunnelDao; + ResourceManager _resourceMgr; public OvsTunnelListener(OvsTunnelDao tunnelDao, HostDao hostDao) { this._hostDao = hostDao; this._tunnelDao = tunnelDao; + ComponentLocator locator = ComponentLocator.getLocator("management-server"); + _resourceMgr = locator.getManager(ResourceManager.class); } @Override @@ -76,7 +81,7 @@ public class OvsTunnelListener implements Listener { } try { - List hosts = _hostDao.listByType(Host.Type.Routing); + List hosts = _resourceMgr.listAllHostsInAllZonesByType(Host.Type.Routing); for (HostVO h : hosts) { if (h.getId() == host.getId()) { continue; diff --git a/server/src/com/cloud/resource/ResourceManager.java b/server/src/com/cloud/resource/ResourceManager.java index 4f5b0d11906..2d57a2ce89a 100755 --- a/server/src/com/cloud/resource/ResourceManager.java +++ b/server/src/com/cloud/resource/ResourceManager.java @@ -26,6 +26,7 @@ import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Host; +import com.cloud.host.Status; import com.cloud.host.Host.Type; import com.cloud.host.HostVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; @@ -83,4 +84,20 @@ public interface ResourceManager { public boolean maintain(final long hostId) throws AgentUnavailableException; public boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage); + + public List findDirectlyConnectedHosts(); + + public List listAllUpAndEnabledHosts(Host.Type type, Long clusterId, Long podId, long dcId); + + public List listAllHostsInCluster(long clusterId); + + public List listHostsInClusterByStatus(long clusterId, Status status); + + public List listAllUpAndEnabledHostsInOneZoneByType(Host.Type type, long dcId); + + public List listAllHostsInOneZoneByType(Host.Type type, long dcId); + + public List listAllHostsInAllZonesByType(Type type); + + public List listAvailHypervisorInZone(Long hostId, Long zoneId); } diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 33b9df661d9..c7c4e4436a0 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -111,6 +111,8 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.NoTransitionException; @@ -472,7 +474,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma throw new InvalidParameterValueException("can not fine cluster for clusterId " + clusterId); } else { if (cluster.getGuid() == null) { - List hosts = _hostDao.listByCluster(clusterId); + List hosts = listAllHostsInCluster(clusterId); if (!hosts.isEmpty()) { throw new CloudRuntimeException("Guid is not updated for cluster " + clusterId + " need to wait hosts in this cluster up"); } @@ -622,7 +624,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma if (resource instanceof KvmDummyResourceBase) { Map details = entry.getValue(); String guid = details.get("guid"); - List kvmHosts = _hostDao.listBy(Host.Type.Routing, clusterId, podId, dcId); + List kvmHosts = listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId); for (HostVO host : kvmHosts) { if (host.getGuid().equalsIgnoreCase(guid)) { if(hostTags != null){ @@ -709,7 +711,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma _hostDao.remove(hostId); if (clusterId != null) { - List hosts = _hostDao.listByCluster(clusterId); + List hosts = listAllHostsInCluster(clusterId); if (hosts.size() == 0) { ClusterVO cluster = _clusterDao.findById(clusterId); cluster.setGuid(null); @@ -778,7 +780,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma return true; } - List hosts = _hostDao.listByCluster(cmd.getId()); + List hosts = this.listAllHostsInCluster(cmd.getId()); if (hosts.size() > 0) { if (s_logger.isDebugEnabled()) { s_logger.debug("Cluster: " + cmd.getId() + " still has hosts"); @@ -886,7 +888,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma cluster.setManagedState(Managed.ManagedState.PrepareUnmanaged); _clusterDao.update(cluster.getId(), cluster); txn.commit(); - List hosts = _hostDao.listBy(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); + List hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); for( HostVO host : hosts ) { if(host.getType().equals(Host.Type.Routing) && !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) && !host.getStatus().equals(Status.Up) && !host.getStatus().equals(Status.Alert) ) { @@ -908,7 +910,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma Thread.sleep(20 * 1000); } catch (Exception e) { } - hosts = _hostDao.listBy(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); + hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); for( HostVO host : hosts ) { if ( !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) && !host.getStatus().equals(Status.Alert)) { @@ -1010,8 +1012,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma return true; } - List hosts = _hostDao.listBy(host.getClusterId(), host.getPodId(), host.getDataCenterId()); - + List hosts = listAllUpAndEnabledHosts(Host.Type.Routing, host.getClusterId(), host.getPodId(), host.getDataCenterId()); for (final VMInstanceVO vm : vms) { if (hosts == null || hosts.size() <= 1 || !answer.getMigrate()) { // for the last host in this cluster, stop all the VMs @@ -1486,7 +1487,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma Map details = hostDetails; String guid = details.get("guid"); - List currentHosts = _hostDao.listBy(hostType, zoneId); + List currentHosts = this.listAllUpAndEnabledHostsInOneZoneByType(hostType, zoneId); for (HostVO currentHost : currentHosts) { if (currentHost.getGuid().equals(guid)) { return currentHost; @@ -1775,7 +1776,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma return doUpdateHostPassword(cmd.getHostId()); } else { // get agents for the cluster - List hosts = _hostDao.listByCluster(cmd.getClusterId()); + List hosts = this.listAllHostsInCluster(cmd.getClusterId()); for (HostVO h : hosts) { try { /*FIXME: this is a buggy logic, check with alex. Shouldn't return if propagation return non null*/ @@ -1810,4 +1811,90 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma } } } + + @Override + public List findDirectlyConnectedHosts() { + /* The resource column is not null for direct connected resource */ + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getResource(), Op.NNULL); + sc.addAnd(sc.getEntity().getResourceState(), Op.NIN, ResourceState.Disabled); + return sc.list(); + } + + @Override + public List listAllUpAndEnabledHosts(Type type, Long clusterId, Long podId, long dcId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + if (type != null) { + sc.addAnd(sc.getEntity().getType(), Op.EQ, type); + } + if (clusterId != null) { + sc.addAnd(sc.getEntity().getClusterId(), Op.EQ, clusterId); + } + if (podId != null) { + sc.addAnd(sc.getEntity().getPodId(), Op.EQ, podId); + } + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); + sc.addAnd(sc.getEntity(), Op.EQ, Status.Up); + sc.addAnd(sc.getEntity().getResourceState(), Op.EQ, ResourceState.Enabled); + return sc.list(); + } + + @Override + public List listAllHostsInCluster(long clusterId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getClusterId(), Op.EQ, clusterId); + return sc.list(); + } + + @Override + public List listHostsInClusterByStatus(long clusterId, Status status) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getClusterId(), Op.EQ, clusterId); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, status); + return sc.list(); + } + + @Override + public List listAllUpAndEnabledHostsInOneZoneByType(Type type, long dcId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, type); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up); + sc.addAnd(sc.getEntity().getResourceState(), Op.EQ, ResourceState.Enabled); + return sc.list(); + } + + @Override + public List listAllHostsInOneZoneByType(Type type, long dcId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, type); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); + return sc.list(); + } + + @Override + public List listAllHostsInAllZonesByType(Type type) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, type); + return sc.list(); + } + + @Override + public List listAvailHypervisorInZone(Long hostId, Long zoneId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + if (zoneId != null) { + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, zoneId); + } + if (hostId != null) { + sc.addAnd(sc.getEntity().getHostId(), Op.EQ, hostId); + } + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + List hosts = sc.list(); + + List hypers = new ArrayList(5); + for (HostVO host : hosts) { + hypers.add(host.getHypervisorType()); + } + return hypers; + } } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index a8ef10ce2cc..a1d59456c63 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -171,6 +171,7 @@ import com.cloud.network.NetworkVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; +import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.DiskOfferingVO; @@ -308,6 +309,7 @@ public class ManagementServerImpl implements ManagementServer { private final LoadBalancerDao _loadbalancerDao; private final HypervisorCapabilitiesDao _hypervisorCapabilitiesDao; private final Adapters _hostAllocators; + private final ResourceManager _resourceMgr; private final KeystoreManager _ksMgr; @@ -372,6 +374,7 @@ public class ManagementServerImpl implements ManagementServer { _sshKeyPairDao = locator.getDao(SSHKeyPairDao.class); _itMgr = locator.getManager(VirtualMachineManager.class); _ksMgr = locator.getManager(KeystoreManager.class); + _resourceMgr = locator.getManager(ResourceManager.class); _hypervisorCapabilitiesDao = locator.getDao(HypervisorCapabilitiesDao.class); @@ -1321,7 +1324,7 @@ public class ManagementServerImpl implements ManagementServer { } List hypers = null; if( ! isIso ) { - hypers = _hostDao.getAvailHypervisorInZone(null, null); + hypers = _resourceMgr.listAvailHypervisorInZone(null, null); } Set> templateZonePairSet = new HashSet>(); @@ -3328,7 +3331,7 @@ public class ManagementServerImpl implements ManagementServer { String secondaryStorageURL = _storageMgr.getSecondaryStorageURL(zoneId); StoragePoolVO srcPool = _poolDao.findById(volume.getPoolId()); - List storageServers = _hostDao.listByTypeDataCenter(Host.Type.SecondaryStorage, zoneId); + List storageServers = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.SecondaryStorage, zoneId); HostVO sserver = storageServers.get(0); List extractURLList = _uploadDao.listByTypeUploadStatus(volumeId, Upload.Type.VOLUME, UploadVO.Status.DOWNLOAD_URL_CREATED); @@ -3769,7 +3772,7 @@ public class ManagementServerImpl implements ManagementServer { } } else { // get all the hosts in this cluster - List hosts = _hostDao.listByCluster(cmd.getClusterId()); + List hosts = _resourceMgr.listAllHostsInCluster(cmd.getClusterId()); Transaction txn = Transaction.currentTxn(); txn.start(); for (HostVO h : hosts) { diff --git a/server/src/com/cloud/storage/OCFS2ManagerImpl.java b/server/src/com/cloud/storage/OCFS2ManagerImpl.java index 8990e897999..b75b055d552 100755 --- a/server/src/com/cloud/storage/OCFS2ManagerImpl.java +++ b/server/src/com/cloud/storage/OCFS2ManagerImpl.java @@ -28,6 +28,8 @@ import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.exception.CloudRuntimeException; @Local(value ={OCFS2Manager.class}) @@ -129,7 +131,12 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener { throw new CloudRuntimeException("Cannot find cluster for ID " + clusterId); } - List hosts = _hostDao.listByInAllStatus(Host.Type.Routing, clusterId, cluster.getPodId(), cluster.getDataCenterId()); + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getClusterId(), Op.EQ, clusterId); + sc.addAnd(sc.getEntity().getPodId(), Op.EQ, cluster.getPodId()); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, cluster.getDataCenterId()); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); + List hosts = sc.list(); if (hosts.isEmpty()) { s_logger.debug("There is no host in cluster " + clusterId + ", no need to prepare OCFS2 nodes"); return true; diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 9ffac334d44..699047e8688 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -119,6 +119,7 @@ import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.NetworkManager; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.org.Grouping; +import com.cloud.resource.ResourceManager; import com.cloud.server.ManagementServer; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; @@ -289,6 +290,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag protected ResourceLimitService _resourceLimitMgr; @Inject protected SecondaryStorageVmManager _ssvmMgr; + @Inject + protected ResourceManager _resourceMgr; @Inject(adapter = StoragePoolAllocator.class) protected Adapters _storagePoolAllocators; @@ -939,7 +942,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag public Pair getAbsoluteIsoPath(long templateId, long dataCenterId) { String isoPath = null; - List storageHosts = _hostDao.listAllBy(Host.Type.SecondaryStorage, dataCenterId); + List storageHosts = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.SecondaryStorage, dataCenterId); if (storageHosts != null) { for (HostVO storageHost : storageHosts) { VMTemplateHostVO templateHostVO = _vmTemplateHostDao.findByHostTemplate(storageHost.getId(), templateId); @@ -1105,7 +1108,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } // Check if there is host up in this cluster - List allHosts = _hostDao.listBy(Host.Type.Routing, clusterId, podId, zoneId); + List allHosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, zoneId); if (allHosts.isEmpty()) { throw new ResourceUnavailableException("No host up to associate a storage pool with in cluster " + clusterId, HostPodVO.class, podId); } @@ -1739,9 +1742,9 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } // Check that there is at least one host in the specified zone - List hosts = _hostDao.listByDataCenter(zoneId); + List hosts = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Host.Type.Routing, zoneId); if (hosts.isEmpty()) { - throw new InvalidParameterValueException("Please add a host in the specified zone before creating a new volume."); + throw new InvalidParameterValueException("There is no workable host in data center id " + zoneId + ", please check hosts' agent status and see if they are disabled"); } if (!sharedPoolExists) { @@ -2072,7 +2075,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } - List hosts = _hostDao.listByClusterStatus(primaryStorage.getClusterId(), Status.Up); + List hosts = _resourceMgr.listHostsInClusterByStatus(primaryStorage.getClusterId(), Status.Up); if( hosts == null || hosts.size() == 0 ) { primaryStorage.setStatus(StoragePoolStatus.Maintenance); _storagePoolDao.update(primaryStorageId, primaryStorage); @@ -2304,7 +2307,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag primaryStorage.setStatus(StoragePoolStatus.Up); _storagePoolDao.update(primaryStorageId, primaryStorage); txn.commit(); - List hosts = _hostDao.listByClusterStatus(primaryStorage.getClusterId(), Status.Up); + List hosts = _resourceMgr.listHostsInClusterByStatus(primaryStorage.getClusterId(), Status.Up); if( hosts == null || hosts.size() == 0 ) { return _storagePoolDao.findById(primaryStorageId); } diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java index a837d5a4eb2..080e1bc2bd0 100755 --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@ -54,6 +54,7 @@ import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc; @@ -127,6 +128,8 @@ public class DownloadMonitorImpl implements DownloadMonitor { private ClusterDao _clusterDao; @Inject private HostDao _hostDao; + @Inject + private ResourceManager _resourceMgr; private String _name; private Boolean _sslCopy = new Boolean(false); @@ -421,14 +424,14 @@ public class DownloadMonitorImpl implements DownloadMonitor { @Override public void handleSysTemplateDownload(HostVO host) { - List hypers = _hostDao.getAvailHypervisorInZone(host.getId(), host.getDataCenterId()); + List hypers = _resourceMgr.listAvailHypervisorInZone(host.getId(), host.getDataCenterId()); HypervisorType hostHyper = host.getHypervisorType(); if (hypers.contains(hostHyper)) { return; } Set toBeDownloaded = new HashSet(); - List ssHosts = _hostDao.listBy(Host.Type.SecondaryStorage, host.getDataCenterId()); + List ssHosts = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Host.Type.SecondaryStorage, host.getDataCenterId()); if (ssHosts == null || ssHosts.isEmpty()) { return; } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index d815011b3f6..293bf787a2f 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -1310,4 +1310,13 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V sc.addAnd(sc.getEntity().getType(), Op.IN, Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage); return sc.list(); } + + @Override + public List listUpSecondaryStorageVmHost(long dcId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, com.cloud.host.Status.Up); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorageVM); + return sc.list(); + } } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java index 00df0c23937..060cda25305 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java @@ -51,5 +51,6 @@ public interface SecondaryStorageVmManager extends Manager { public List listSecondaryStorageHostsInAllZones(); public List listSecondaryStorageHostsInOneZone(long dataCenterId); public List listLocalSecondaryStorageHostsInOneZone(long dataCenterId); - public List listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId); + public List listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId); + public List listUpSecondaryStorageVmHost(long dcId); } diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 2b41f7d596b..8591c81bc01 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -67,6 +67,7 @@ import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; import com.cloud.storage.Snapshot; import com.cloud.storage.Snapshot.Status; import com.cloud.storage.Snapshot.Type; @@ -170,6 +171,8 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma private SwiftDao _swiftDao; @Inject private SecondaryStorageVmManager _ssvmMgr; + @Inject + private ResourceManager _resourceMgr; String _name; private int _totalRetries; private int _pauseInterval; @@ -373,7 +376,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma if (_volsDao.getHypervisorType(v.getId()).equals(HypervisorType.KVM)) { StoragePoolVO storagePool = _storagePoolDao.findById(v.getPoolId()); ClusterVO cluster = _clusterDao.findById(storagePool.getClusterId()); - List hosts = _hostDao.listByCluster(cluster.getId()); + List hosts = _resourceMgr.listAllHostsInCluster(cluster.getId()); if (hosts != null && !hosts.isEmpty()) { HostVO host = hosts.get(0); if (!hostSupportSnapsthot(host)) { diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java index 5eabeced5e8..b9299cf2bcb 100755 --- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java +++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java @@ -48,6 +48,7 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; +import com.cloud.resource.ResourceManager; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Upload; import com.cloud.storage.Upload.Mode; @@ -95,6 +96,8 @@ public class UploadMonitorImpl implements UploadMonitor { private AgentManager _agentMgr; @Inject ConfigurationDao _configDao; + @Inject + ResourceManager _resourceMgr; private String _name; private Boolean _sslCopy = new Boolean(false); @@ -165,7 +168,7 @@ public class UploadMonitorImpl implements UploadMonitor { Type type = (template.getFormat() == ImageFormat.ISO) ? Type.ISO : Type.TEMPLATE ; - List storageServers = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorage, dataCenterId); + List storageServers = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.SecondaryStorage, dataCenterId); HostVO sserver = storageServers.get(0); UploadVO uploadTemplateObj = new UploadVO(sserver.getId(), template.getId(), new Date(), @@ -264,7 +267,7 @@ public class UploadMonitorImpl implements UploadMonitor { String errorString = ""; boolean success = false; try{ - List storageServers = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorage, dataCenterId); + List storageServers = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.SecondaryStorage, dataCenterId); if(storageServers == null ){ errorString = "No Storage Server found at the datacenter - " +dataCenterId; throw new CloudRuntimeException(errorString); diff --git a/utils/src/com/cloud/utils/db/SearchCriteria2.java b/utils/src/com/cloud/utils/db/SearchCriteria2.java index 77253a4eeee..d685f3dec96 100755 --- a/utils/src/com/cloud/utils/db/SearchCriteria2.java +++ b/utils/src/com/cloud/utils/db/SearchCriteria2.java @@ -18,9 +18,13 @@ public class SearchCriteria2 extends SearchCriteria { GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); assert dao != null : "Can not find DAO for " + entityType.getName(); SearchBuilder sb = (SearchBuilder) dao.createSearchBuilder(); - SearchCriteria2 sc = new SearchCriteria2(sb, dao); + SearchCriteria2 sc = new SearchCriteria2(sb, dao); return (SearchCriteria2) sc; } + + public void selectField(Object... useless) { + _sb.selectField(useless); + } public void addAnd(Object useless, Op op, Object...values) { String uuid = UUID.randomUUID().toString();