diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java index 34a1b8d49a0..dadcf6cf753 100644 --- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -18,18 +18,17 @@ package org.apache.cloudstack.api.response; import java.util.Date; -import com.amazonaws.services.importexport.model.Job; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.EntityReference; import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.jobs.Job; import com.cloud.serializer.Param; -@EntityReference(value=Job.class) -@SuppressWarnings("unused") +@EntityReference(value = Job.class) public class AsyncJobResponse extends BaseResponse { @SerializedName("accountid") @Param(description="the account that executed the async command") diff --git a/build/replace.properties b/build/replace.properties index 265f3358724..1b321a03118 100644 --- a/build/replace.properties +++ b/build/replace.properties @@ -17,7 +17,7 @@ DBUSER=cloud DBPW=cloud -DBROOTPW= +DBROOTPW=cloud MSLOG=vmops.log APISERVERLOG=api.log DBHOST=localhost diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/ClusterEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/ClusterEntityImpl.java index 041fa12b93f..46570a0a0c5 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/ClusterEntityImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/ClusterEntityImpl.java @@ -89,7 +89,7 @@ public class ClusterEntityImpl implements ClusterEntity { @Override public State getState() { - return clusterVO.getState(); + return clusterVO.getEngineState(); } @Override diff --git a/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java index 0a3a44b1d0c..f81d5ef1ffb 100755 --- a/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java @@ -19,40 +19,47 @@ package org.apache.cloudstack.platform.orchestration; import java.net.URL; +import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.inject.Inject; -import org.springframework.stereotype.Component; +import org.apache.log4j.Logger; import org.apache.cloudstack.engine.cloud.entity.api.NetworkEntity; import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity; import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity; +import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl; import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; import org.apache.cloudstack.engine.service.api.OrchestrationService; import org.apache.cloudstack.engine.vm.VMEntityManager; -import org.apache.cloudstack.engine.vm.VirtualMachineOrchestrator; import com.cloud.deploy.DeploymentPlan; import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.hypervisor.Hypervisor; +import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.user.dao.AccountDao; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.NicProfile; +import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -@Component public class CloudOrchestrator implements OrchestrationService { - - @Inject - VirtualMachineOrchestrator _vmOrchestrator; + private final static Logger s_logger = Logger.getLogger(CloudOrchestrator.class); @Inject private VMEntityManager vmEntityManager; @@ -81,8 +88,39 @@ public class CloudOrchestrator implements OrchestrationService { @Inject protected AccountDao _accountDao = null; - protected CloudOrchestrator() { + public CloudOrchestrator() { } + + public VirtualMachineEntity createFromScratch(String uuid, String iso, String os, String hypervisor, String hostName, int cpu, int speed, long memory, List networks, List computeTags, + Map details, String owner) { + // TODO Auto-generated method stub + return null; + } + + public String reserve(String vm, String planner, Long until) throws InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + public String deploy(String reservationId) { + // TODO Auto-generated method stub + return null; + } + + public void joinNetwork(String network1, String network2) { + // TODO Auto-generated method stub + + } + + public void createNetwork() { + // TODO Auto-generated method stub + + } + + public void destroyNetwork() { + // TODO Auto-generated method stub + + } @Override public VolumeEntity createVolume() { @@ -123,42 +161,118 @@ public class CloudOrchestrator implements OrchestrationService { List rootDiskTags, Map networkNicMap, DeploymentPlan plan) throws InsufficientCapacityException { - return _vmOrchestrator.create(id, - owner, - templateId, - hostName, - displayName, - Hypervisor.HypervisorType.valueOf(hypervisor), - cpu, - speed, - memory, - diskSize, - computeTags, - rootDiskTags, - networkNicMap, - plan); + // VirtualMachineEntityImpl vmEntity = new VirtualMachineEntityImpl(id, owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, networks, vmEntityManager); + + List> networkIpMap = new ArrayList>(); + for (String uuid : networkNicMap.keySet()) { + NetworkVO network = _networkDao.findByUuid(uuid); + if(network != null){ + networkIpMap.add(new Pair(network, networkNicMap.get(uuid))); + } + } + + VirtualMachineEntityImpl vmEntity = ComponentContext.inject(VirtualMachineEntityImpl.class); + vmEntity.init(id, owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, new ArrayList(networkNicMap.keySet())); + + + HypervisorType hypervisorType = HypervisorType.valueOf(hypervisor); + + //load vm instance and offerings and call virtualMachineManagerImpl + VMInstanceVO vm = _vmDao.findByUuid(id); + + // If the template represents an ISO, a disk offering must be passed in, and will be used to create the root disk + // Else, a disk offering is optional, and if present will be used to create the data disk + + Pair rootDiskOffering = new Pair(null, null); + List> dataDiskOfferings = new ArrayList>(); + + ServiceOfferingVO offering = _serviceOfferingDao.findById(vm.getServiceOfferingId()); + rootDiskOffering.first(offering); + + if(vm.getDiskOfferingId() != null){ + DiskOfferingVO diskOffering = _diskOfferingDao.findById(vm.getDiskOfferingId()); + if (diskOffering == null) { + throw new InvalidParameterValueException("Unable to find disk offering " + vm.getDiskOfferingId()); + } + Long size = null; + if (diskOffering.getDiskSize() == 0) { + size = diskSize; + if (size == null) { + throw new InvalidParameterValueException( + "Disk offering " + diskOffering + + " requires size parameter."); + } + } + dataDiskOfferings.add(new Pair(diskOffering, size)); + } + + + try { + _itMgr.allocate(vm.getInstanceName(), _templateDao.findById(new Long(templateId)), offering, rootDiskOffering, dataDiskOfferings, networkIpMap, null, plan, + hypervisorType, _accountDao.findById(new Long(owner))); + } catch (CloudRuntimeException e) { + s_logger.warn("Unable to allocate resources for " + vm, e); + return null; + } + + return vmEntity; } @Override public VirtualMachineEntity createVirtualMachineFromScratch(String id, String owner, String isoId, String hostName, String displayName, String hypervisor, String os, int cpu, int speed, long memory,Long diskSize, List computeTags, List rootDiskTags, Map networkNicMap, DeploymentPlan plan) throws InsufficientCapacityException { - return _vmOrchestrator.createFromScratch( - id, - owner, - isoId, - hostName, - displayName, - Hypervisor.HypervisorType.valueOf(hypervisor), - os, - cpu, - speed, - memory, - diskSize, - computeTags, - rootDiskTags, - networkNicMap, - plan); + // VirtualMachineEntityImpl vmEntity = new VirtualMachineEntityImpl(id, owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, networks, vmEntityManager); + VirtualMachineEntityImpl vmEntity = ComponentContext.inject(VirtualMachineEntityImpl.class); + vmEntity.init(id, owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, new ArrayList(networkNicMap.keySet())); + + //load vm instance and offerings and call virtualMachineManagerImpl + VMInstanceVO vm = _vmDao.findByUuid(id); + + + Pair rootDiskOffering = new Pair(null, null); + ServiceOfferingVO offering = _serviceOfferingDao.findById(vm.getServiceOfferingId()); + rootDiskOffering.first(offering); + + List> dataDiskOfferings = new ArrayList>(); + Long diskOfferingId = vm.getDiskOfferingId(); + if (diskOfferingId == null) { + throw new InvalidParameterValueException( + "Installing from ISO requires a disk offering to be specified for the root disk."); + } + DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId); + if (diskOffering == null) { + throw new InvalidParameterValueException("Unable to find disk offering " + diskOfferingId); + } + Long size = null; + if (diskOffering.getDiskSize() == 0) { + size = diskSize; + if (size == null) { + throw new InvalidParameterValueException("Disk offering " + + diskOffering + " requires size parameter."); + } + } + rootDiskOffering.first(diskOffering); + rootDiskOffering.second(size); + + List> networkIpMap = new ArrayList>(); + for (String uuid : networkNicMap.keySet()) { + NetworkVO network = _networkDao.findByUuid(uuid); + if(network != null){ + networkIpMap.add(new Pair(network, networkNicMap.get(uuid))); + } + } + + HypervisorType hypervisorType = HypervisorType.valueOf(hypervisor); + + try { + _itMgr.allocate(vm.getInstanceName(), _templateDao.findById(new Long(isoId)), offering, rootDiskOffering, dataDiskOfferings, networkIpMap, null, plan, hypervisorType, _accountDao.findById(new Long(owner))); + } catch (CloudRuntimeException e) { + s_logger.warn("Unable to allocate resources for " + vm, e); + return null; + } + + return vmEntity; } @Override @@ -169,7 +283,8 @@ public class CloudOrchestrator implements OrchestrationService { @Override public VirtualMachineEntity getVirtualMachine(String id) { - return _vmOrchestrator.get(id); + VirtualMachineEntityImpl vmEntity = new VirtualMachineEntityImpl(id, vmEntityManager); + return vmEntity; } } diff --git a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineClusterVO.java b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineClusterVO.java index c64fdf8eabe..83997e1bb07 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineClusterVO.java +++ b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineClusterVO.java @@ -237,7 +237,7 @@ public class EngineClusterVO implements EngineCluster, Identity { return lastUpdated; } - public State getState() { + public State getEngineState() { return engineState; } } diff --git a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineDataCenterVO.java b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineDataCenterVO.java index 08d3085eb22..274463ee263 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineDataCenterVO.java +++ b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineDataCenterVO.java @@ -158,7 +158,7 @@ public class EngineDataCenterVO implements EngineDataCenter, Identity { @Enumerated(value=EnumType.STRING) @StateMachine(state=State.class, event=Event.class) @Column(name="engine_state", updatable=true, nullable=false, length=32) - protected State engineState = null; + protected State state = null; @Override @@ -246,7 +246,7 @@ public class EngineDataCenterVO implements EngineDataCenter, Identity { this.zoneToken = zoneToken; this.domain = domainSuffix; this.uuid = UUID.randomUUID().toString(); - this.engineState = State.Disabled; + this.state = State.Disabled; } @Override @@ -481,7 +481,7 @@ public class EngineDataCenterVO implements EngineDataCenter, Identity { } public State getState() { - return engineState; + return state; } @Override diff --git a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineHostPodVO.java b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineHostPodVO.java index 3b78b8590d6..5bab2c69828 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineHostPodVO.java +++ b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/EngineHostPodVO.java @@ -92,7 +92,7 @@ public class EngineHostPodVO implements EnginePod, Identity { @Enumerated(value=EnumType.STRING) @StateMachine(state=State.class, event=Event.class) @Column(name="engine_state", updatable=true, nullable=false, length=32) - protected State engineState = null; + protected State state = null; public EngineHostPodVO(String name, long dcId, String gateway, String cidrAddress, int cidrSize, String description) { this.name = name; @@ -104,7 +104,7 @@ public class EngineHostPodVO implements EnginePod, Identity { this.allocationState = Grouping.AllocationState.Enabled; this.externalDhcp = false; this.uuid = UUID.randomUUID().toString(); - this.engineState = State.Disabled; + this.state = State.Disabled; } /* @@ -240,6 +240,6 @@ public class EngineHostPodVO implements EnginePod, Identity { } public State getState() { - return engineState; + return state; } } diff --git a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineClusterDaoImpl.java b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineClusterDaoImpl.java index fb86e448eea..550a2457ec4 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineClusterDaoImpl.java +++ b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineClusterDaoImpl.java @@ -24,13 +24,13 @@ import java.util.Map; import javax.ejb.Local; import javax.inject.Inject; +import org.apache.log4j.Logger; + import org.apache.cloudstack.engine.datacenter.entity.EngineClusterVO; import org.apache.cloudstack.engine.datacenter.entity.EngineHostPodVO; import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity; import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State; import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Grouping; @@ -45,7 +45,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.exception.CloudRuntimeException; -@Component(value="EngineClusterDao") @Local(value=EngineClusterDao.class) public class EngineClusterDaoImpl extends GenericDaoBase implements EngineClusterDao { private static final Logger s_logger = Logger.getLogger(EngineClusterDaoImpl.class); @@ -97,7 +96,7 @@ public class EngineClusterDaoImpl extends GenericDaoBase StateChangeSearch = createSearchBuilder(); StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ); - StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ); + StateChangeSearch.and("state", StateChangeSearch.entity().getEngineState(), SearchCriteria.Op.EQ); StateChangeSearch.done(); } @@ -273,7 +272,7 @@ public class EngineClusterDaoImpl extends GenericDaoBase EngineClusterVO dbCluster = findByIdIncludingRemoved(vo.getId()); if (dbCluster != null) { StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString()); - str.append(": DB Data={id=").append(dbCluster.getId()).append("; state=").append(dbCluster.getState()).append(";updatedTime=") + str.append(": DB Data={id=").append(dbCluster.getId()).append("; state=").append(dbCluster.getEngineState()).append(";updatedTime=") .append(dbCluster.getLastUpdated()); str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatedTime=").append(vo.getLastUpdated()); str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatedTime=").append(oldUpdatedTime); diff --git a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineHostDaoImpl.java b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineHostDaoImpl.java index 99ecd1f49d8..163968a0cab 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineHostDaoImpl.java +++ b/engine/schema/src/org/apache/cloudstack/engine/datacenter/entity/dao/EngineHostDaoImpl.java @@ -29,11 +29,12 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.persistence.TableGenerator; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import org.apache.cloudstack.engine.datacenter.entity.EngineHostVO; import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity; import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.host.Host; import com.cloud.host.Host.Type; @@ -311,7 +312,8 @@ public class EngineHostDaoImpl extends GenericDaoBase implem StateChangeSearch = createSearchBuilder(); StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ); - StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ); + //FIXME getState() or getStatus()? + StateChangeSearch.and("state", StateChangeSearch.entity().getStatus(), SearchCriteria.Op.EQ); StateChangeSearch.done(); } @@ -336,7 +338,7 @@ public class EngineHostDaoImpl extends GenericDaoBase implem @Override @DB public List findAndUpdateDirectAgentToLoad(long lastPingSecondsAfter, Long limit, long managementServerId) { Transaction txn = Transaction.currentTxn(); - txn.start(); + txn.start(); SearchCriteria sc = UnmanagedDirectConnectSearch.create(); sc.setParameters("lastPinged", lastPingSecondsAfter); //sc.setParameters("resourceStates", ResourceState.ErrorInMaintenance, ResourceState.Maintenance, ResourceState.PrepareForMaintenance, ResourceState.Disabled); diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java index fc3eed3b367..19eff1c9cd2 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java @@ -18,97 +18,81 @@ package org.apache.cloudstack.framework.jobs; import java.util.Date; -import org.apache.cloudstack.api.Identity; -import org.apache.cloudstack.api.InternalIdentity; +import org.apache.cloudstack.jobs.Job; +public interface AsyncJob extends Job { -public interface AsyncJob extends Identity, InternalIdentity { + public enum JournalType { + SUCCESS, FAILURE + }; public static interface Topics { public static final String JOB_HEARTBEAT = "job.heartbeat"; public static final String JOB_STATE = "job.state"; } - public enum JournalType { - SUCCESS, FAILURE - }; - + @Override String getType(); + @Override String getDispatcher(); + @Override int getPendingSignals(); - public enum Type { - None, - VirtualMachine, - DomainRouter, - Volume, - ConsoleProxy, - Snapshot, - Template, - Iso, - SystemVm, - Host, - StoragePool, - IpAddress, - PortableIpAddress, - SecurityGroup, - PhysicalNetwork, - TrafficType, - PhysicalNetworkServiceProvider, - FirewallRule, - Account, - User, - PrivateGateway, - StaticRoute, - Counter, - Condition, - AutoScalePolicy, - AutoScaleVmProfile, - AutoScaleVmGroup, - GlobalLoadBalancerRule, - LoadBalancerRule, - AffinityGroup, - InternalLbVm, - DedicatedGuestVlanRange - } + @Override long getUserId(); + @Override long getAccountId(); + @Override String getCmd(); + @Override int getCmdVersion(); + @Override String getCmdInfo(); + @Override int getStatus(); + @Override int getProcessStatus(); + @Override int getResultCode(); + @Override String getResult(); + @Override Long getInitMsid(); void setInitMsid(Long msid); + @Override Long getExecutingMsid(); + @Override Long getCompleteMsid(); void setCompleteMsid(Long msid); + @Override Date getCreated(); + @Override Date getLastUpdated(); + @Override Date getLastPolled(); Date getRemoved(); + @Override String getInstanceType(); + @Override Long getInstanceId(); SyncQueueItem getSyncSource(); diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobVO.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobVO.java index c77a7859d2c..b5f883cf07b 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobVO.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobVO.java @@ -33,13 +33,15 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; +import org.apache.cloudstack.jobs.Job; + import com.cloud.utils.db.GenericDao; @Entity @Table(name="async_job") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="job_type", discriminatorType=DiscriminatorType.STRING, length=32) -public class AsyncJobVO implements AsyncJob { +public class AsyncJobVO implements AsyncJob, Job { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -112,13 +114,13 @@ public class AsyncJobVO implements AsyncJob { private Date removed; @Column(name="uuid") - private String uuid; + private String uuid; @Transient private SyncQueueItem syncSource = null; public AsyncJobVO() { - this.uuid = UUID.randomUUID().toString(); + uuid = UUID.randomUUID().toString(); } public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, Long instanceId, String instanceType) { @@ -126,17 +128,11 @@ public class AsyncJobVO implements AsyncJob { this.accountId = accountId; this.cmd = cmd; this.cmdInfo = cmdInfo; - this.uuid = UUID.randomUUID().toString(); + uuid = UUID.randomUUID().toString(); this.instanceId = instanceId; this.instanceType = instanceType; } - public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, - int callbackType, String callbackAddress, Long instanceId, Type instanceType) { - - this.type ="AsyncJobVO"; - } - @Override public long getId() { return id; @@ -148,7 +144,7 @@ public class AsyncJobVO implements AsyncJob { @Override public String getType() { - return this.type; + return type; } public void setType(String type) { @@ -157,7 +153,7 @@ public class AsyncJobVO implements AsyncJob { @Override public String getDispatcher() { - return this.dispatcher; + return dispatcher; } public void setDispatcher(String dispatcher) { @@ -166,11 +162,11 @@ public class AsyncJobVO implements AsyncJob { @Override public int getPendingSignals() { - return this.pendingSignals; + return pendingSignals; } public void setPendingSignals(int signals) { - this.pendingSignals = signals; + pendingSignals = signals; } @Override @@ -266,7 +262,7 @@ public class AsyncJobVO implements AsyncJob { @Override public Long getExecutingMsid() { - return this.executingMsid; + return executingMsid; } public void setExecutingMsid(Long executingMsid) { @@ -349,7 +345,7 @@ public class AsyncJobVO implements AsyncJob { @Override public String getUuid() { - return this.uuid; + return uuid; } public void setUuid(String uuid) { diff --git a/server/pom.xml b/server/pom.xml index 357c732167c..758a1dee84d 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -95,11 +95,6 @@ cloud-framework-events ${project.version} - - org.apache.cloudstack - cloud-framework-ipc - ${project.version} - install diff --git a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java index 331d90f0137..15f245c5bea 100644 --- a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java +++ b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java @@ -28,6 +28,7 @@ import com.google.gson.reflect.TypeToken; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ExceptionResponse; import org.apache.cloudstack.framework.jobs.AsyncJob; @@ -61,7 +62,7 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat cmdObj = ComponentContext.inject(cmdObj); cmdObj.configure(); cmdObj.setJob(job); - + Type mapType = new TypeToken>() {}.getType(); Gson gson = ApiGsonHelper.getBuilder().create(); Map params = gson.fromJson(job.getCmdInfo(), mapType); @@ -72,6 +73,12 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat Long userId = null; Account accountObject = null; + if (cmdObj instanceof BaseAsyncCreateCmd) { + BaseAsyncCreateCmd create = (BaseAsyncCreateCmd)cmdObj; + create.setEntityId(Long.parseLong(params.get("id"))); + create.setEntityUuid(params.get("uuid")); + } + if (userIdStr != null) { userId = Long.parseLong(userIdStr); } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 4591a057162..68a7481c562 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -34,7 +34,6 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.InfrastructureEntity; @@ -69,7 +68,6 @@ import com.cloud.utils.ReflectUtil; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; -@Component public class ApiDispatcher { private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName()); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 0cd72018ac8..b68e8e177d2 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -588,12 +588,10 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer if (job.getInstanceId() == null) { continue; } - String instanceUuid = job.getUuid(); - if (instanceUuid != null) { - objectJobMap.put(instanceUuid, job); - } + String instanceUuid = ApiDBUtils.findJobInstanceUuid(job); + objectJobMap.put(instanceUuid, job); } - + for (ResponseObject response : responses) { if (response.getObjectId() != null && objectJobMap.containsKey(response.getObjectId())) { AsyncJob job = objectJobMap.get(response.getObjectId()); diff --git a/tools/devcloud/devcloud.cfg b/tools/devcloud/devcloud.cfg index e6ab71b5ebf..484896f8dbd 100644 --- a/tools/devcloud/devcloud.cfg +++ b/tools/devcloud/devcloud.cfg @@ -19,7 +19,7 @@ { "zones": [ { - "name": "DevCloud0", + "name": "DevCloud1", "enabled" : "True", "physical_networks": [ { diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java b/utils/src/com/cloud/utils/component/ComponentContext.java index 5c5194cca2d..6fc25b21efd 100644 --- a/utils/src/com/cloud/utils/component/ComponentContext.java +++ b/utils/src/com/cloud/utils/component/ComponentContext.java @@ -49,16 +49,16 @@ import com.cloud.utils.mgmt.ManagementBean; public class ComponentContext implements ApplicationContextAware { private static final Logger s_logger = Logger.getLogger(ComponentContext.class); - private static ApplicationContext s_appContext; + private static ApplicationContext s_appContext; @Override public void setApplicationContext(ApplicationContext applicationContext) { s_logger.info("Setup Spring Application context"); - s_appContext = applicationContext; - } + s_appContext = applicationContext; + } - public static ApplicationContext getApplicationContext() { - return s_appContext; + public static ApplicationContext getApplicationContext() { + return s_appContext; } public static void initComponentsLifeCycle() { @@ -89,7 +89,7 @@ public class ComponentContext implements ApplicationContextAware { try { entry.getValue().check(); } catch(Throwable e) { - s_logger.error("System integrity check failed. Refuse to startup"); + s_logger.error("System integrity check failed. Refuse to startup", e); System.exit(1); } } @@ -211,7 +211,7 @@ public class ComponentContext implements ApplicationContextAware { } catch (Exception e) { return (T)instance; } - } + } return (T)instance; }