diff --git a/server/src/com/cloud/network/NetworkRuleApplier.java b/api/src/com/cloud/network/NetworkRuleApplier.java similarity index 100% rename from server/src/com/cloud/network/NetworkRuleApplier.java rename to api/src/com/cloud/network/NetworkRuleApplier.java diff --git a/api/src/com/cloud/network/guru/NetworkGuru.java b/api/src/com/cloud/network/guru/NetworkGuru.java index 4127233d3aa..57ffef86b54 100755 --- a/api/src/com/cloud/network/guru/NetworkGuru.java +++ b/api/src/com/cloud/network/guru/NetworkGuru.java @@ -29,7 +29,6 @@ import com.cloud.user.Account; import com.cloud.utils.component.Adapter; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; -import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; /** @@ -196,10 +195,9 @@ public interface NetworkGuru extends Adapter { * * @param network guest network being destroyed. * @param offering network offering the guest network was created with. - * @param owner owner of the network. * @return true if trash was successful; false if not. */ - boolean trash(Network network, NetworkOffering offering, Account owner); + boolean trash(Network network, NetworkOffering offering); void updateNetworkProfile(NetworkProfile networkProfile); diff --git a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java index 5f21eb50046..a773ac42a3a 100644 --- a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java +++ b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java @@ -33,6 +33,7 @@ import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.offering.DiskOffering; +import com.cloud.storage.Snapshot; import com.cloud.storage.StoragePool; import com.cloud.storage.Volume; import com.cloud.storage.Volume.Type; @@ -61,6 +62,8 @@ public interface VolumeOrchestrationService { String getVmNameOnVolume(Volume volume); + VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot) throws StorageUnavailableException; + Volume migrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException; void destroyVolume(Volume volume); diff --git a/engine/components-api/pom.xml b/engine/components-api/pom.xml index fdcac6adda6..55af5eebb3b 100644 --- a/engine/components-api/pom.xml +++ b/engine/components-api/pom.xml @@ -33,11 +33,21 @@ cloud-engine-api ${project.version} + + org.apache.cloudstack + cloud-engine-schema + ${project.version} + org.apache.cloudstack cloud-framework-ipc ${project.version} + + org.apache.cloudstack + cloud-framework-events + ${project.version} + org.apache.cloudstack cloud-framework-jobs diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManager.java b/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java similarity index 100% rename from server/src/com/cloud/deploy/DeploymentPlanningManager.java rename to engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java diff --git a/server/src/com/cloud/event/UsageEventUtils.java b/engine/components-api/src/com/cloud/event/UsageEventUtils.java similarity index 97% rename from server/src/com/cloud/event/UsageEventUtils.java rename to engine/components-api/src/com/cloud/event/UsageEventUtils.java index b1301a826e7..b44ed3280db 100644 --- a/server/src/com/cloud/event/UsageEventUtils.java +++ b/engine/components-api/src/com/cloud/event/UsageEventUtils.java @@ -17,28 +17,28 @@ package com.cloud.event; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.event.dao.UsageEventDao; -import com.cloud.server.ManagementServer; -import com.cloud.user.Account; -import com.cloud.user.dao.AccountDao; -import com.cloud.utils.component.ComponentContext; -import org.apache.cloudstack.framework.events.Event; -import org.apache.cloudstack.framework.events.EventBus; -import org.apache.cloudstack.framework.events.EventBusException; -import org.apache.log4j.Logger; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import javax.inject.Inject; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; -@Component +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; + +import org.apache.cloudstack.framework.events.Event; +import org.apache.cloudstack.framework.events.EventBus; +import org.apache.cloudstack.framework.events.EventBusException; + +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.event.dao.UsageEventDao; +import com.cloud.user.Account; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.component.ComponentContext; + public class UsageEventUtils { private static UsageEventDao _usageEventDao; @@ -141,7 +141,7 @@ public class UsageEventUtils { if (account == null) return; - Event event = new Event(ManagementServer.Name, EventCategory.USAGE_EVENT.getName(), usageEventType, + Event event = new Event(Name, EventCategory.USAGE_EVENT.getName(), usageEventType, resourceType, resourceUUID); Map eventDescription = new HashMap(); @@ -162,4 +162,7 @@ public class UsageEventUtils { s_logger.warn("Failed to publish usage event on the the event bus."); } } + + static final String Name = "management-server"; + } diff --git a/server/src/com/cloud/network/IpAddressManager.java b/engine/components-api/src/com/cloud/network/IpAddressManager.java similarity index 100% rename from server/src/com/cloud/network/IpAddressManager.java rename to engine/components-api/src/com/cloud/network/IpAddressManager.java diff --git a/server/src/com/cloud/network/addr/PublicIp.java b/engine/components-api/src/com/cloud/network/addr/PublicIp.java similarity index 100% rename from server/src/com/cloud/network/addr/PublicIp.java rename to engine/components-api/src/com/cloud/network/addr/PublicIp.java diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/engine/components-api/src/com/cloud/network/lb/LoadBalancingRulesManager.java similarity index 96% rename from server/src/com/cloud/network/lb/LoadBalancingRulesManager.java rename to engine/components-api/src/com/cloud/network/lb/LoadBalancingRulesManager.java index 2218f7d3061..3e325859a9a 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java +++ b/engine/components-api/src/com/cloud/network/lb/LoadBalancingRulesManager.java @@ -30,9 +30,9 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.LoadBalancerContainer.Scheme; import com.cloud.user.Account; -public interface LoadBalancingRulesManager extends LoadBalancingRulesService { +public interface LoadBalancingRulesManager { - LoadBalancer createPublicLoadBalancer(String xId, String name, String description, + LoadBalancer createPublicLoadBalancer(String xId, String name, String description, int srcPort, int destPort, long sourceIpId, String protocol, String algorithm, boolean openFirewall, CallContext caller) throws NetworkRuleConflictException; diff --git a/server/src/com/cloud/template/TemplateManager.java b/engine/components-api/src/com/cloud/template/TemplateManager.java similarity index 96% rename from server/src/com/cloud/template/TemplateManager.java rename to engine/components-api/src/com/cloud/template/TemplateManager.java index 8427fa92c7b..4c42ab74c4b 100755 --- a/server/src/com/cloud/template/TemplateManager.java +++ b/engine/components-api/src/com/cloud/template/TemplateManager.java @@ -21,13 +21,11 @@ import java.util.List; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; -import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import com.cloud.dc.DataCenterVO; import com.cloud.exception.InternalErrorException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; -import com.cloud.host.HostVO; import com.cloud.storage.StoragePool; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStoragePoolVO; @@ -37,7 +35,7 @@ import com.cloud.utils.Pair; /** * TemplateManager manages the templates stored on secondary storage. It is responsible for creating private/public templates. */ -public interface TemplateManager extends TemplateApiService{ +public interface TemplateManager { /** * Prepares a template for vm creation for a certain storage pool. diff --git a/server/src/com/cloud/vm/ReservationContextImpl.java b/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java similarity index 100% rename from server/src/com/cloud/vm/ReservationContextImpl.java rename to engine/components-api/src/com/cloud/vm/ReservationContextImpl.java diff --git a/server/src/com/cloud/vm/VirtualMachineProfileImpl.java b/engine/components-api/src/com/cloud/vm/VirtualMachineProfileImpl.java similarity index 100% rename from server/src/com/cloud/vm/VirtualMachineProfileImpl.java rename to engine/components-api/src/com/cloud/vm/VirtualMachineProfileImpl.java diff --git a/engine/orchestration/pom.xml b/engine/orchestration/pom.xml index 4f8e5d76344..290a4d42ddd 100755 --- a/engine/orchestration/pom.xml +++ b/engine/orchestration/pom.xml @@ -43,6 +43,11 @@ cloud-framework-ipc ${project.version} + + org.apache.cloudstack + cloud-framework-events + ${project.version} + org.apache.cloudstack cloud-engine-components-api @@ -57,10 +62,9 @@ org.apache.cloudstack cloud-server ${project.version} - + - install maven-surefire-plugin diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java similarity index 98% rename from server/src/com/cloud/network/NetworkManagerImpl.java rename to engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index dab0e5f42c5..19145211197 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network; +package org.apache.cloudstack.engine.orchestration; import java.net.URI; import java.util.ArrayList; @@ -37,28 +37,17 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; +import org.apache.log4j.lf5.viewer.configure.ConfigurationManager; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.context.ServerContexts; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.region.PortableIpDao; -import com.cloud.agent.AgentManager; -import com.cloud.agent.Listener; -import com.cloud.agent.api.AgentControlAnswer; -import com.cloud.agent.api.AgentControlCommand; import com.cloud.agent.api.Answer; -import com.cloud.agent.api.CheckNetworkAnswer; -import com.cloud.agent.api.CheckNetworkCommand; import com.cloud.agent.api.Command; -import com.cloud.agent.api.StartupCommand; -import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; -import com.cloud.alert.AlertManager; -import com.cloud.api.ApiDBUtils; -import com.cloud.configuration.Config; -import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; @@ -67,7 +56,6 @@ import com.cloud.dc.DataCenterVnetVO; import com.cloud.dc.PodVlanMapVO; import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.DataCenterVnetDao; import com.cloud.dc.dao.PodVlanMapDao; @@ -76,7 +64,6 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.Domain; -import com.cloud.domain.dao.DomainDao; import com.cloud.event.dao.UsageEventDao; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ConnectionException; @@ -91,14 +78,23 @@ import com.cloud.host.Host; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.IpAddress; import com.cloud.network.IpAddress.State; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Event; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; +import com.cloud.network.NetworkMigrationResponder; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkProfile; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetworkSetupInfo; +import com.cloud.network.RemoteAccessVpn; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.AccountGuestVlanMapDao; import com.cloud.network.dao.AccountGuestVlanMapVO; @@ -128,18 +124,13 @@ import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRulesManager; -import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.LoadBalancerContainer.Scheme; import com.cloud.network.rules.PortForwardingRuleVO; -import com.cloud.network.rules.RulesManager; import com.cloud.network.rules.StaticNatRule; -import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; -import com.cloud.network.vpc.NetworkACLManager; -import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.PrivateIpDao; import com.cloud.network.vpn.RemoteAccessVpnService; import com.cloud.offering.NetworkOffering; @@ -149,13 +140,10 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.offerings.dao.NetworkOfferingDetailsDao; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; -import com.cloud.server.ConfigurationServer; import com.cloud.user.Account; -import com.cloud.user.AccountManager; import com.cloud.user.ResourceLimitService; import com.cloud.user.User; import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.AdapterBase; @@ -196,11 +184,11 @@ import com.cloud.vm.dao.VMInstanceDao; * NetworkManagerImpl implements NetworkManager. */ @Local(value = { NetworkOrchestrationService.class}) -public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrationService, Listener { - static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); - @Inject - EntityManager _entityMgr; +public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestrationService, Listener { + static final Logger s_logger = Logger.getLogger(NetworkOrchestrator.class); + @Inject + EntityManager _entityMgr = null; @Inject DataCenterDao _dcDao = null; @Inject @@ -210,10 +198,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat @Inject AccountDao _accountDao = null; @Inject - DomainDao _domainDao = null; - @Inject - UserDao _userDao = null; - @Inject ConfigurationDao _configDao; @Inject UserVmDao _userVmDao = null; @@ -224,8 +208,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat @Inject ConfigurationManager _configMgr; @Inject - AccountVlanMapDao _accountVlanMapDao; - @Inject NetworkOfferingDao _networkOfferingDao = null; @Inject NetworkDao _networksDao = null; @@ -318,8 +300,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat @Inject NetworkServiceMapDao _ntwkSrvcDao; @Inject - StorageNetworkManager _stnwMgr; - @Inject VpcManager _vpcMgr; @Inject PrivateIpDao _privateIpDao; @@ -612,7 +592,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat return true; } - protected NetworkManagerImpl() { + protected NetworkOrchestrator() { setStateMachine(); } @@ -2103,7 +2083,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat @Override @DB public boolean destroyNetwork(long networkId, ReservationContext context) { - Account callerAccount = _accountMgr.getAccount(context.getCaller().getAccountId()); + Account callerAccount = context.getAccount(); NetworkVO network = _networksDao.findById(networkId); if (network == null) { @@ -2194,11 +2174,10 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat s_logger.debug("Network id=" + networkId + " is destroyed successfully, cleaning up corresponding resources now."); } NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); - Account owner = _accountMgr.getAccount(network.getAccountId()); Transaction txn = Transaction.currentTxn(); txn.start(); - guru.trash(network, _networkOfferingDao.findById(network.getNetworkOfferingId()), owner); + guru.trash(network, _networkOfferingDao.findById(network.getNetworkOfferingId())); if (!deleteVlansInNetwork(network.getId(), context.getCaller().getId(), callerAccount)) { success = false; @@ -2223,7 +2202,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat NetworkOffering ntwkOff = _entityMgr.findById(NetworkOffering.class, network.getNetworkOfferingId()); boolean updateResourceCount = resourceCountNeedsUpdate(ntwkOff, network.getAclType()); if (updateResourceCount) { - _resourceLimitMgr.decrementResourceCount(owner.getId(), ResourceType.network); + _resourceLimitMgr.decrementResourceCount(network.getAccountId(), ResourceType.network); } txn.commit(); } @@ -2266,6 +2245,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat public class NetworkGarbageCollector implements Runnable { @Override public void run() { + ServerContexts.registerSystemContext(); GlobalLock gcLock = GlobalLock.getInternLock("Network.GC.Lock"); try { if(gcLock.lock(3)) { @@ -2277,6 +2257,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat } } finally { gcLock.releaseRef(); + ServerContexts.unregisterSystemContext(); } } @@ -2311,6 +2292,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat _lastNetworkIdsToFree = stillFree; + CallContext cctx = CallContext.current(); + for (Long networkId : shutdownList) { // If network is removed, unset gc flag for it @@ -2320,8 +2303,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkOrchestrat } else { try { - User caller = _accountMgr.getSystemUser(); - Account owner = _accountMgr.getAccount(_networksDao.findById(networkId).getAccountId()); + User caller = cctx.getCallingUser(); + Account owner = cctx.getCallingAccount(); ReservationContext context = new ReservationContextImpl(null, null, caller, owner); diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java index 9ff5c260593..5af1a7c0cc8 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java @@ -45,7 +45,10 @@ import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult; import org.apache.cloudstack.framework.async.AsyncCallFuture; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.config.ConfigDepot; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.cloudstack.framework.config.ConfigValue; +import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.storage.command.CommandResult; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; @@ -55,7 +58,7 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.DiskTO; import com.cloud.agent.api.to.VirtualMachineTO; -import com.cloud.configuration.Config; +import com.cloud.agent.manager.allocator.PodAllocator; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; @@ -73,7 +76,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; -import com.cloud.resource.ResourceManager; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Snapshot; @@ -91,7 +93,6 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.ResourceLimitService; import com.cloud.uservm.UserVm; -import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.DB; @@ -106,7 +107,7 @@ import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.VirtualMachineProfileImpl; -public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrationService { +public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrationService, Configurable { private static final Logger s_logger = Logger.getLogger(VolumeOrchestrator.class); @Inject @@ -124,10 +125,6 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati @Inject protected ResourceLimitService _resourceLimitMgr; @Inject - protected ResourceManager _resourceMgr; - @Inject - ConfigurationDao _configDao; - @Inject VolumeDetailsDao _volDetailDao; @Inject DataStoreManager dataStoreMgr; @@ -139,9 +136,12 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati TemplateDataFactory tmplFactory; @Inject SnapshotDataFactory snapshotFactory; + @Inject + ConfigDepot _configDepot; + private final StateMachine2 _volStateMachine; - private long _maxVolumeSizeInGb; - private boolean _recreateSystemVmEnabled; + private ConfigValue _maxVolumeSizeInGb; + private ConfigValue _recreateSystemVmEnabled; protected List _storagePoolAllocators; public List getStoragePoolAllocators() { @@ -152,6 +152,16 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati this._storagePoolAllocators = _storagePoolAllocators; } + protected List _podAllocators; + + public List getPodAllocators() { + return _podAllocators; + } + + public void setPodAllocators(List _podAllocators) { + this._podAllocators = _podAllocators; + } + protected VolumeOrchestrator() { _volStateMachine = Volume.State.getStateMachine(); } @@ -243,8 +253,19 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati return null; } + public Pair findPod(VirtualMachineTemplate template, ServiceOffering offering, DataCenter dc, long accountId, Set avoids) { + for (PodAllocator allocator : _podAllocators) { + final Pair pod = allocator.allocateTo(template, offering, dc, accountId, avoids); + if (pod != null) { + return pod; + } + } + return null; + } + @DB - protected VolumeInfo createVolumeFromSnapshot(VolumeVO volume, Snapshot snapshot) throws StorageUnavailableException { + @Override + public VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot) throws StorageUnavailableException { Account account = _entityMgr.findById(Account.class, volume.getAccountId()); final HashSet poolsToAvoid = new HashSet(); @@ -258,7 +279,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati DiskProfile dskCh = new DiskProfile(volume, diskOffering, snapshot.getHypervisorType()); // Determine what pod to store the volume in - while ((pod = _resourceMgr.findPod(null, null, dc, account.getId(), podsToAvoid)) != null) { + while ((pod = findPod(null, null, dc, account.getId(), podsToAvoid)) != null) { podsToAvoid.add(pod.first().getId()); // Determine what storage pool to store the volume in while ((pool = findStoragePool(dskCh, dc, pod.first(), null, null, null, poolsToAvoid)) != null) { @@ -322,25 +343,6 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati } } - protected VolumeVO createVolumeFromSnapshot(VolumeVO volume, long snapshotId) throws StorageUnavailableException { - VolumeInfo createdVolume = null; - Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId); - createdVolume = createVolumeFromSnapshot(volume, snapshot); - - UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, - createdVolume.getAccountId(), - createdVolume.getDataCenterId(), - createdVolume.getId(), - createdVolume.getName(), - createdVolume.getDiskOfferingId(), - null, - createdVolume.getSize(), - Volume.class.getName(), - createdVolume.getUuid()); - - return _volsDao.findById(createdVolume.getId()); - } - @DB public VolumeInfo copyVolumeFromSecToPrimary(VolumeInfo volume, VirtualMachine vm, VirtualMachineTemplate template, DataCenter dc, Pod pod, Long clusterId, ServiceOffering offering, DiskOffering diskOffering, List avoids, long size, HypervisorType hyperType) throws NoTransitionException { @@ -487,7 +489,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati public boolean validateVolumeSizeRange(long size) { if (size < 0 || (size > 0 && size < (1024 * 1024 * 1024))) { throw new InvalidParameterValueException("Please specify a size of at least 1 Gb."); - } else if (size > (_maxVolumeSizeInGb * 1024 * 1024 * 1024)) { + } else if (size > (_maxVolumeSizeInGb.value() * 1024 * 1024 * 1024)) { throw new InvalidParameterValueException("volume size " + size + ", but the maximum size allowed is " + _maxVolumeSizeInGb + " Gb."); } @@ -907,7 +909,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati } private List getTasks(List vols, Map destVols) throws StorageUnavailableException { - boolean recreate = _recreateSystemVmEnabled; + boolean recreate = _recreateSystemVmEnabled.value(); List tasks = new ArrayList(); for (VolumeVO vol : vols) { StoragePoolVO assignedPool = null; @@ -979,7 +981,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati private Pair recreateVolume(VolumeVO vol, VirtualMachineProfile vm, DeployDestination dest) throws StorageUnavailableException { VolumeVO newVol; - boolean recreate = _recreateSystemVmEnabled; + boolean recreate = _recreateSystemVmEnabled.value(); DataStore destPool = null; if (recreate && (dest.getStorageForDisks() == null || dest.getStorageForDisks().get(vol) == null)) { destPool = dataStoreMgr.getDataStore(vol.getPoolId(), DataStoreRole.Primary); @@ -1091,14 +1093,36 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati } return true; } + + public static final ConfigKey MaxVolumeSize = new ConfigKey(Long.class, + "storage.max.volume.size", + "Storage", + "2000", + "The maximum size for a volume (in GB).", + true); + + public static final ConfigKey RecreatableSystemVmEnabled = new ConfigKey(Boolean.class, + "recreate.systemvm.enabled", + "Advanced", + "false", + "If true, will recreate system vm root disk whenever starting system vm", + true); + + @Override + public ConfigKey[] getConfigKeys() { + return new ConfigKey[] {RecreatableSystemVmEnabled, MaxVolumeSize}; + } + + @Override + public String getConfigComponentName() { + return VolumeOrchestrationService.class.getSimpleName(); + } @Override public boolean configure(String name, Map params) throws ConfigurationException { - String maxVolumeSizeInGbString = _configDao.getValue("storage.max.volume.size"); - _maxVolumeSizeInGb = NumbersUtil.parseLong(maxVolumeSizeInGbString, 2000); + _maxVolumeSizeInGb = _configDepot.get(MaxVolumeSize); - String value = _configDao.getValue(Config.RecreateSystemVmEnabled.key()); - _recreateSystemVmEnabled = Boolean.parseBoolean(value); + _recreateSystemVmEnabled = _configDepot.get(RecreatableSystemVmEnabled); return true; } diff --git a/engine/schema/pom.xml b/engine/schema/pom.xml index 06d07148809..a62cb90f65b 100644 --- a/engine/schema/pom.xml +++ b/engine/schema/pom.xml @@ -38,20 +38,10 @@ cloud-framework-ipc ${project.version} - - org.apache.cloudstack - cloud-engine-components-api - ${project.version} - org.apache.cloudstack cloud-framework-db ${project.version} - - install - src - test - diff --git a/server/src/com/cloud/storage/dao/GuestOSHypervisorDao.java b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDao.java similarity index 100% rename from server/src/com/cloud/storage/dao/GuestOSHypervisorDao.java rename to engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDao.java diff --git a/server/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java similarity index 100% rename from server/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java rename to engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java index 49a8e16b827..a96524cdd9f 100755 --- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -23,21 +23,17 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.Collections; import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.storage.VMTemplateStorageResourceAssoc; - -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; - import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; + import com.cloud.dc.dao.DataCenterDao; import com.cloud.domain.dao.DomainDao; import com.cloud.host.Host; @@ -48,6 +44,7 @@ import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; +import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateZoneVO; import com.cloud.tags.ResourceTagVO; @@ -73,8 +70,6 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem @Inject VMTemplateDetailsDao _templateDetailsDao; - @Inject - ConfigurationDao _configDao; @Inject HostDao _hostDao; @Inject diff --git a/server/src/com/cloud/storage/dao/VolumeDetailsDao.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java similarity index 100% rename from server/src/com/cloud/storage/dao/VolumeDetailsDao.java rename to engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java diff --git a/server/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java similarity index 100% rename from server/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java rename to engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java diff --git a/server/src/com/cloud/vm/NicDetailVO.java b/engine/schema/src/com/cloud/vm/NicDetailVO.java similarity index 100% rename from server/src/com/cloud/vm/NicDetailVO.java rename to engine/schema/src/com/cloud/vm/NicDetailVO.java diff --git a/server/src/com/cloud/vm/dao/NicDetailDao.java b/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java similarity index 100% rename from server/src/com/cloud/vm/dao/NicDetailDao.java rename to engine/schema/src/com/cloud/vm/dao/NicDetailDao.java diff --git a/server/src/com/cloud/vm/dao/NicDetailDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java similarity index 100% rename from server/src/com/cloud/vm/dao/NicDetailDaoImpl.java rename to engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java diff --git a/server/src/com/cloud/vm/dao/NicIpAliasDao.java b/engine/schema/src/com/cloud/vm/dao/NicIpAliasDao.java similarity index 100% rename from server/src/com/cloud/vm/dao/NicIpAliasDao.java rename to engine/schema/src/com/cloud/vm/dao/NicIpAliasDao.java diff --git a/server/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java similarity index 100% rename from server/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java rename to engine/schema/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java diff --git a/server/src/com/cloud/vm/dao/NicIpAliasVO.java b/engine/schema/src/com/cloud/vm/dao/NicIpAliasVO.java similarity index 100% rename from server/src/com/cloud/vm/dao/NicIpAliasVO.java rename to engine/schema/src/com/cloud/vm/dao/NicIpAliasVO.java diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/network/guru/BigSwitchVnsGuestNetworkGuru.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/network/guru/BigSwitchVnsGuestNetworkGuru.java index 52303a43fa1..4396d47534b 100644 --- a/plugins/network-elements/bigswitch-vns/src/com/cloud/network/guru/BigSwitchVnsGuestNetworkGuru.java +++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/network/guru/BigSwitchVnsGuestNetworkGuru.java @@ -254,8 +254,7 @@ public class BigSwitchVnsGuestNetworkGuru extends GuestNetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, - Account owner) { - return super.trash(network, offering, owner); + public boolean trash(Network network, NetworkOffering offering) { + return super.trash(network, offering); } } diff --git a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java index ac77cf6e07e..891496a6bbc 100644 --- a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java +++ b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java @@ -170,10 +170,9 @@ public class MidoNetGuestNetworkGuru extends GuestNetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, - Account owner) { + public boolean trash(Network network, NetworkOffering offering) { s_logger.debug("trash called with network: " + network.toString()); - return super.trash(network, offering, owner); + return super.trash(network, offering); } } diff --git a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetPublicNetworkGuru.java b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetPublicNetworkGuru.java index ef97380a971..eccf4aa3944 100644 --- a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetPublicNetworkGuru.java +++ b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetPublicNetworkGuru.java @@ -230,7 +230,7 @@ public class MidoNetPublicNetworkGuru extends PublicNetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { s_logger.debug("trash called with network: " + network.toString()); return true; } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index 9451441baf2..fc1ecd0938b 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -256,9 +256,8 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, - Account owner) { - return super.trash(network, offering, owner); + public boolean trash(Network network, NetworkOffering offering) { + return super.trash(network, offering); } diff --git a/server/pom.xml b/server/pom.xml index c08d76a40d8..6446b7eca28 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -50,6 +50,13 @@ cloud-framework-jobs ${project.version} + org.apache.httpcomponents httpclient @@ -111,6 +118,11 @@ cloud-framework-config ${project.version} + + org.apache.cloudstack + cloud-engine-components-api + ${project.version} + diff --git a/server/src/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/com/cloud/network/guru/ControlNetworkGuru.java index 893e140bb61..1943e16a4f3 100755 --- a/server/src/com/cloud/network/guru/ControlNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ControlNetworkGuru.java @@ -232,7 +232,7 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu } @Override - public boolean trash(Network config, NetworkOffering offering, Account owner) { + public boolean trash(Network config, NetworkOffering offering) { return true; } diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java index b30a0c6b60d..55da113a148 100755 --- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java @@ -303,7 +303,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { @Override @DB - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { //Have to remove all placeholder nics List nics = _nicDao.listPlaceholderNicsByNetworkId(network.getId()); Transaction txn = Transaction.currentTxn(); diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java index aed470afb1e..a3eab0f5452 100755 --- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java @@ -424,7 +424,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur } @Override - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { return true; } diff --git a/server/src/com/cloud/network/guru/PodBasedNetworkGuru.java b/server/src/com/cloud/network/guru/PodBasedNetworkGuru.java index 38624652c1b..ab64f8ee78f 100755 --- a/server/src/com/cloud/network/guru/PodBasedNetworkGuru.java +++ b/server/src/com/cloud/network/guru/PodBasedNetworkGuru.java @@ -166,7 +166,7 @@ public class PodBasedNetworkGuru extends AdapterBase implements NetworkGuru { } @Override - public boolean trash(Network config, NetworkOffering offering, Account owner) { + public boolean trash(Network config, NetworkOffering offering) { return true; } } diff --git a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java index 9f02175e05e..12dce85815b 100644 --- a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java +++ b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java @@ -234,7 +234,7 @@ public class PrivateNetworkGuru extends AdapterBase implements NetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { return true; } diff --git a/server/src/com/cloud/network/guru/PublicNetworkGuru.java b/server/src/com/cloud/network/guru/PublicNetworkGuru.java index b6ecb849f08..f82e22e8dde 100755 --- a/server/src/com/cloud/network/guru/PublicNetworkGuru.java +++ b/server/src/com/cloud/network/guru/PublicNetworkGuru.java @@ -215,7 +215,7 @@ public class PublicNetworkGuru extends AdapterBase implements NetworkGuru { } @Override - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { return true; } diff --git a/server/src/com/cloud/network/guru/StorageNetworkGuru.java b/server/src/com/cloud/network/guru/StorageNetworkGuru.java index 86dd5f6b996..6d82dc5d737 100755 --- a/server/src/com/cloud/network/guru/StorageNetworkGuru.java +++ b/server/src/com/cloud/network/guru/StorageNetworkGuru.java @@ -177,7 +177,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu } @Override - public boolean trash(Network network, NetworkOffering offering, Account owner) { + public boolean trash(Network network, NetworkOffering offering) { // TODO Auto-generated method stub return false; } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index ca562a98a3e..c685ee3e40b 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -31,7 +31,6 @@ import javax.ejb.Local; import javax.inject.Inject; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -162,7 +161,6 @@ import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; -@Component @Local(value = { LoadBalancingRulesManager.class, LoadBalancingRulesService.class }) public class LoadBalancingRulesManagerImpl extends ManagerBase implements LoadBalancingRulesManager, LoadBalancingRulesService { diff --git a/server/src/com/cloud/resource/ResourceManager.java b/server/src/com/cloud/resource/ResourceManager.java index 6efe867568b..85af36f502a 100755 --- a/server/src/com/cloud/resource/ResourceManager.java +++ b/server/src/com/cloud/resource/ResourceManager.java @@ -18,14 +18,11 @@ package com.cloud.resource; import java.util.List; import java.util.Map; -import java.util.Set; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Pod; import com.cloud.dc.PodCluster; import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Host; @@ -34,10 +31,7 @@ import com.cloud.host.HostStats; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.offering.ServiceOffering; import com.cloud.resource.ResourceState.Event; -import com.cloud.template.VirtualMachineTemplate; -import com.cloud.utils.Pair; import com.cloud.utils.fsm.NoTransitionException; /** @@ -117,16 +111,6 @@ public interface ResourceManager extends ResourceService { public List listHostsByNameLike(String name); - /** - * Find a pod based on the user id, template, and data center. - * - * @param template - * @param dc - * @param userId - * @return - */ - Pair findPod(VirtualMachineTemplate template, ServiceOffering offering, DataCenter dc, long accountId, Set avoids); - HostStats getHostStatistics(long hostId); Long getGuestOSCategoryId(long hostId); diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 400879d8029..59c70970ef6 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -25,7 +25,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; @@ -67,7 +66,6 @@ import com.cloud.agent.api.UnsupportedAnswer; import com.cloud.agent.api.UpdateHostPasswordCommand; import com.cloud.agent.manager.AgentAttache; import com.cloud.agent.manager.ClusteredAgentManagerImpl; -import com.cloud.agent.manager.allocator.PodAllocator; import com.cloud.agent.transport.Request; import com.cloud.api.ApiDBUtils; import com.cloud.capacity.Capacity; @@ -79,13 +77,11 @@ import com.cloud.configuration.ConfigurationManager; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterDetailsVO; import com.cloud.dc.ClusterVO; -import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.DedicatedResourceVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Pod; import com.cloud.dc.PodCluster; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.ClusterVSMMapDao; @@ -119,7 +115,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.kvm.discoverer.KvmDummyResourceBase; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; -import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; import com.cloud.org.Grouping; import com.cloud.org.Grouping.AllocationState; @@ -136,11 +131,9 @@ import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; -import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.User; -import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; import com.cloud.utils.UriUtils; import com.cloud.utils.component.Manager; @@ -237,15 +230,6 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, @Inject protected StoragePoolHostDao _storagePoolHostDao; - protected List _podAllocators; - - public List getPodAllocators() { - return _podAllocators; - } - - public void setPodAllocators(List _podAllocators) { - this._podAllocators = _podAllocators; - } @Inject protected VMTemplateDao _templateDao; @@ -2472,17 +2456,6 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, return sc.list(); } - @Override - public Pair findPod(VirtualMachineTemplate template, ServiceOffering offering, DataCenter dc, long accountId, - Set avoids) { - for (PodAllocator allocator : _podAllocators) { - final Pair pod = allocator.allocateTo(template, offering, dc, accountId, avoids); - if (pod != null) { - return pod; - } - } - return null; - } @Override public HostStats getHostStatistics(long hostId) { diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java index d50a1d08b03..cc995892eb3 100644 --- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java @@ -18,10 +18,8 @@ package com.cloud.storage; import java.util.ArrayList; import java.util.Date; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -48,7 +46,6 @@ import org.apache.cloudstack.engine.subsystem.api.storage.HostScope; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; import org.apache.cloudstack.engine.subsystem.api.storage.Scope; import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; -import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; @@ -86,7 +83,6 @@ import com.cloud.consoleproxy.ConsoleProxyManager; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; -import com.cloud.dc.Pod; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; @@ -140,7 +136,6 @@ import com.cloud.user.dao.UserDao; import com.cloud.user.dao.VmDiskStatisticsDao; import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.Pair; import com.cloud.utils.UriUtils; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.DB; @@ -149,7 +144,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.fsm.StateMachine2; -import com.cloud.vm.DiskProfile; import com.cloud.vm.UserVmManager; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; @@ -692,7 +686,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic protected VolumeVO createVolumeFromSnapshot(VolumeVO volume, long snapshotId) throws StorageUnavailableException { VolumeInfo createdVolume = null; SnapshotVO snapshot = _snapshotDao.findById(snapshotId); - createdVolume = createVolumeFromSnapshot(volume, snapshot); + createdVolume = _volumeMgr.createVolumeFromSnapshot(volume, snapshot); UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(), createdVolume.getDiskOfferingId(), null, createdVolume.getSize(), Volume.class.getName(), createdVolume.getUuid()); @@ -700,56 +694,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic return _volsDao.findById(createdVolume.getId()); } - @DB - protected VolumeInfo createVolumeFromSnapshot(VolumeVO volume, SnapshotVO snapshot) throws StorageUnavailableException { - Account account = _accountDao.findById(volume.getAccountId()); - - final HashSet poolsToAvoid = new HashSet(); - StoragePool pool = null; - - Set podsToAvoid = new HashSet(); - Pair pod = null; - - DiskOfferingVO diskOffering = _diskOfferingDao.findByIdIncludingRemoved(volume.getDiskOfferingId()); - DataCenterVO dc = _dcDao.findById(volume.getDataCenterId()); - DiskProfile dskCh = new DiskProfile(volume, diskOffering, snapshot.getHypervisorType()); - - // Determine what pod to store the volume in - while ((pod = _resourceMgr.findPod(null, null, dc, account.getId(), podsToAvoid)) != null) { - podsToAvoid.add(pod.first().getId()); - // Determine what storage pool to store the volume in - while ((pool = _volumeMgr.findStoragePool(dskCh, dc, pod.first(), null, null, null, poolsToAvoid)) != null) { - break; - } - } - - if (pool == null) { - String msg = "There are no available storage pools to store the volume in"; - s_logger.info(msg); - throw new StorageUnavailableException(msg, -1); - } - - VolumeInfo vol = volFactory.getVolume(volume.getId()); - DataStore store = dataStoreMgr.getDataStore(pool.getId(), DataStoreRole.Primary); - SnapshotInfo snapInfo = snapshotFactory.getSnapshot(snapshot.getId(), DataStoreRole.Image); - AsyncCallFuture future = volService.createVolumeFromSnapshot(vol, store, snapInfo); - try { - VolumeApiResult result = future.get(); - if (result.isFailed()) { - s_logger.debug("Failed to create volume from snapshot:" + result.getResult()); - throw new CloudRuntimeException("Failed to create volume from snapshot:" + result.getResult()); - } - return result.getVolume(); - } catch (InterruptedException e) { - s_logger.debug("Failed to create volume from snapshot", e); - throw new CloudRuntimeException("Failed to create volume from snapshot", e); - } catch (ExecutionException e) { - s_logger.debug("Failed to create volume from snapshot", e); - throw new CloudRuntimeException("Failed to create volume from snapshot", e); - } - - } - @Override @DB @ActionEvent(eventType = EventTypes.EVENT_VOLUME_RESIZE, eventDescription = "resizing volume", async = true) diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index e085be621a0..8a5435503b9 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -31,7 +31,6 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd; @@ -183,7 +182,6 @@ import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -@Component @Local(value = { TemplateManager.class, TemplateApiService.class }) public class TemplateManagerImpl extends ManagerBase implements TemplateManager, TemplateApiService { private final static Logger s_logger = Logger.getLogger(TemplateManagerImpl.class); diff --git a/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java b/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java index 885ac87e849..2385edcd1c5 100644 --- a/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java +++ b/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java @@ -54,6 +54,7 @@ import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRule.LbHealthCheckPolicy; import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.lb.LoadBalancingRulesService; import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.LoadBalancerContainer.Scheme; import com.cloud.projects.Project.ListProjectResourcesCriteria; @@ -89,6 +90,8 @@ public class ApplicationLoadBalancerManagerImpl extends ManagerBase implements A @Inject NetworkOrchestrationService _ntwkMgr; @Inject IpAddressManager _ipAddrMgr; + @Inject + LoadBalancingRulesService _lbService; @Override @@ -362,7 +365,7 @@ public class ApplicationLoadBalancerManagerImpl extends ManagerBase implements A @Override public boolean deleteApplicationLoadBalancer(long id) { - return _lbMgr.deleteLoadBalancerRule(id, true); + return _lbService.deleteLoadBalancerRule(id, true); } @Override diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java deleted file mode 100644 index b60079eff33..00000000000 --- a/server/test/com/cloud/network/NetworkManagerTest.java +++ /dev/null @@ -1,69 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package com.cloud.network; - - -import javax.inject.Inject; - -import junit.framework.Assert; - -import org.apache.log4j.Logger; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; - -import com.cloud.network.element.DhcpServiceProvider; -import com.cloud.network.element.IpDeployer; -import com.cloud.utils.component.AdapterBase; - - -@Ignore("Requires database to be set up") -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations="classpath:/testContext.xml") -//@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") -public class NetworkManagerTest { - private static final Logger s_logger = Logger.getLogger(NetworkManagerTest.class); - @Inject NetworkOrchestrationService _networkMgr; - - @Test - public void testInjected() { - NetworkManagerImpl networkMgr = (NetworkManagerImpl)_networkMgr; - Assert.assertTrue(networkMgr._ipDeployers.iterator().hasNext()); - Assert.assertTrue(networkMgr._networkElements.iterator().hasNext()); - Assert.assertTrue(networkMgr._dhcpProviders.iterator().hasNext()); - Assert.assertNotNull(networkMgr._networkModel); - - Assert.assertNotNull(AdapterBase.getAdapterByName(networkMgr._ipDeployers, "VirtualRouter")); - Assert.assertNotNull(AdapterBase.getAdapterByName(networkMgr._ipDeployers, "VpcVirtualRouter")); - - Assert.assertNotNull(AdapterBase.getAdapterByName(networkMgr._dhcpProviders, "VirtualRouter")); - Assert.assertNotNull(AdapterBase.getAdapterByName(networkMgr._dhcpProviders, "VpcVirtualRouter")); - - - Assert.assertTrue(AdapterBase.getAdapterByName(networkMgr._ipDeployers, "VirtualRouter") instanceof IpDeployer); - Assert.assertTrue(AdapterBase.getAdapterByName(networkMgr._dhcpProviders, "VirtualRouter") instanceof DhcpServiceProvider); - - s_logger.info("Done testing injection of network manager's network elements"); - - } - -} diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/test/com/cloud/resource/MockResourceManagerImpl.java index 651badcf3eb..3f6fb194f89 100644 --- a/server/test/com/cloud/resource/MockResourceManagerImpl.java +++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java @@ -19,7 +19,6 @@ package com.cloud.resource; import java.util.List; import java.util.Map; -import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; @@ -36,10 +35,8 @@ import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Pod; import com.cloud.dc.PodCluster; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.DiscoveryException; @@ -51,11 +48,8 @@ import com.cloud.host.HostStats; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; import com.cloud.resource.ResourceState.Event; -import com.cloud.template.VirtualMachineTemplate; -import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.fsm.NoTransitionException; @@ -430,16 +424,6 @@ public class MockResourceManagerImpl extends ManagerBase implements ResourceMana return null; } - /* (non-Javadoc) - * @see com.cloud.resource.ResourceManager#findPod(com.cloud.template.VirtualMachineTemplate, com.cloud.service.ServiceOfferingVO, com.cloud.dc.DataCenterVO, long, java.util.Set) - */ - @Override - public Pair findPod(VirtualMachineTemplate template, ServiceOffering offering, DataCenter dc, - long accountId, Set avoids) { - // TODO Auto-generated method stub - return null; - } - /* (non-Javadoc) * @see com.cloud.resource.ResourceManager#getHostStatistics(long) */ diff --git a/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java b/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java index bd2374fb3fb..82ef4844bb6 100644 --- a/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java +++ b/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java @@ -52,6 +52,7 @@ import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.lb.LoadBalancingRulesService; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.LoadBalancerContainer.Scheme; import com.cloud.user.AccountManager; @@ -80,6 +81,8 @@ public class ApplicationLoadBalancerTest extends TestCase{ @Inject AccountManager _accountMgr; @Inject FirewallRulesDao _firewallDao; @Inject UsageEventDao _usageEventDao; + @Inject + LoadBalancingRulesService _lbService; public static long existingLbId = 1L; @@ -105,8 +108,8 @@ public class ApplicationLoadBalancerTest extends TestCase{ Mockito.when(_lbDao.findById(2L)).thenReturn(null); //mockito for .deleteApplicationLoadBalancer tests - Mockito.when(_lbMgr.deleteLoadBalancerRule(existingLbId, true)).thenReturn(true); - Mockito.when(_lbMgr.deleteLoadBalancerRule(nonExistingLbId, true)).thenReturn(false); + Mockito.when(_lbService.deleteLoadBalancerRule(existingLbId, true)).thenReturn(true); + Mockito.when(_lbService.deleteLoadBalancerRule(nonExistingLbId, true)).thenReturn(false); //mockito for .createApplicationLoadBalancer tests NetworkVO guestNetwork = new NetworkVO(TrafficType.Guest, null, null, 1,