CLOUDSTACK-669: refactor VM work job dispatcher to allow volume/snapshot manager to participate serialized job handling

This commit is contained in:
Kelven Yang 2013-12-13 17:25:56 -08:00
parent 2f53295151
commit 9d3827e6fe
18 changed files with 703 additions and 689 deletions

View File

@ -99,13 +99,8 @@ public interface VirtualMachineManager extends Manager {
void advanceStart(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy) throws InsufficientCapacityException,
ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
void orchestrateStart(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy) throws InsufficientCapacityException,
ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
void advanceStop(String vmUuid, boolean cleanupEvenIfUnableToStop) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
void orchestrateStop(String vmUuid, boolean cleanupEvenIfUnableToStop) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
void advanceExpunge(String vmUuid) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
void destroy(String vmUuid) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException;
@ -113,19 +108,11 @@ public interface VirtualMachineManager extends Manager {
void migrateAway(String vmUuid, long hostId) throws InsufficientServerCapacityException;
void migrate(String vmUuid, long srcHostId, DeployDestination dest) throws ResourceUnavailableException, ConcurrentOperationException;
void orchestrateMigrate(String vmUuid, long srcHostId, DeployDestination dest) throws ResourceUnavailableException, ConcurrentOperationException;
void migrateWithStorage(String vmUuid, long srcId, long destId, Map<Volume, StoragePool> volumeToPool) throws ResourceUnavailableException,
ConcurrentOperationException;
void orchestrateMigrateWithStorage(String vmUuid, long srcId, long destId, Map<Volume, StoragePool> volumeToPool) throws ResourceUnavailableException,
ConcurrentOperationException;
void migrateWithStorage(String vmUuid, long srcId, long destId, Map<Volume, StoragePool> volumeToPool) throws ResourceUnavailableException, ConcurrentOperationException;
void reboot(String vmUuid, Map<VirtualMachineProfile.Param, Object> params) throws InsufficientCapacityException, ResourceUnavailableException;
void orchestrateReboot(String vmUuid, Map<VirtualMachineProfile.Param, Object> params) throws InsufficientCapacityException, ResourceUnavailableException;
void advanceReboot(String vmUuid, Map<VirtualMachineProfile.Param, Object> params) throws InsufficientCapacityException, ResourceUnavailableException,
ConcurrentOperationException, OperationTimedoutException;
@ -142,8 +129,6 @@ public interface VirtualMachineManager extends Manager {
void storageMigration(String vmUuid, StoragePool storagePoolId);
void orchestrateStorageMigration(String vmUuid, StoragePool storagePoolId);
/**
* @param vmInstance
* @param newServiceOffering
@ -166,12 +151,9 @@ public interface VirtualMachineManager extends Manager {
* @throws ResourceUnavailableException
* @throws InsufficientCapacityException
*/
NicProfile addVmToNetwork(VirtualMachine vm, Network network, NicProfile requested) throws ConcurrentOperationException, ResourceUnavailableException,
InsufficientCapacityException;
NicProfile orchestrateAddVmToNetwork(VirtualMachine vm, Network network, NicProfile requested) throws ConcurrentOperationException,
NicProfile addVmToNetwork(VirtualMachine vm, Network network, NicProfile requested) throws ConcurrentOperationException,
ResourceUnavailableException, InsufficientCapacityException;
/**
* @param vm
* @param nic
@ -181,8 +163,6 @@ public interface VirtualMachineManager extends Manager {
*/
boolean removeNicFromVm(VirtualMachine vm, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException;
boolean orchestrateRemoveNicFromVm(VirtualMachine vm, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException;
/**
* @param vm
* @param network
@ -192,9 +172,6 @@ public interface VirtualMachineManager extends Manager {
* @throws ConcurrentOperationException
*/
boolean removeVmFromNetwork(VirtualMachine vm, Network network, URI broadcastUri) throws ConcurrentOperationException, ResourceUnavailableException;
boolean orchestrateRemoveVmFromNetwork(VirtualMachine vm, Network network, URI broadcastUri) throws ConcurrentOperationException, ResourceUnavailableException;
/**
* @param nic
* @param hypervisorType
@ -210,16 +187,8 @@ public interface VirtualMachineManager extends Manager {
VirtualMachineTO toVmTO(VirtualMachineProfile profile);
VirtualMachine reConfigureVm(String vmUuid, ServiceOffering newServiceOffering, boolean sameHost) throws ResourceUnavailableException, ConcurrentOperationException;
VirtualMachine orchestrateReConfigureVm(String vmUuid, ServiceOffering newServiceOffering, boolean sameHost) throws ResourceUnavailableException,
ConcurrentOperationException;
void findHostAndMigrate(String vmUuid, Long newSvcOfferingId, DeploymentPlanner.ExcludeList excludeHostList) throws InsufficientCapacityException,
ConcurrentOperationException, ResourceUnavailableException;
void migrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long newSvcOfferingId) throws ResourceUnavailableException, ConcurrentOperationException;
void orchestrateMigrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long newSvcOfferingId) throws ResourceUnavailableException,
ConcurrentOperationException;
}

View File

@ -25,11 +25,14 @@ public class VmWork implements Serializable {
long accountId;
long vmId;
public VmWork(long userId, long accountId, long vmId) {
String handlerName;
public VmWork(long userId, long accountId, long vmId, String handlerName) {
this.userId = userId;
this.accountId = accountId;
this.vmId = vmId;
}
this.handlerName = handlerName;
}
public long getUserId() {
return userId;
@ -39,7 +42,11 @@ public class VmWork implements Serializable {
return accountId;
}
public long getVmId() {
return vmId;
public long getVmId() {
return vmId;
}
public String getHandlerName() {
return handlerName;
}
}

View File

@ -60,7 +60,6 @@
<bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
<bean id="cloudOrchestrator"
class="org.apache.cloudstack.engine.orchestration.CloudOrchestrator" />
<bean id="dataCenterResourceManagerImpl"
@ -73,10 +72,16 @@
<bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />
<bean id="virtualMachinePowerStateSyncImpl" class="com.cloud.vm.VirtualMachinePowerStateSyncImpl" />
<bean id= "vmWorkJobDispatcher" class="com.cloud.vm.VmWorkJobDispatcher">
<property name="name">
<util:constant static-field="com.cloud.vm.VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER"/>
</property>
<property name="handlers">
<map>
<entry key="VirtualMachineManagerImpl" value-ref="clusteredVirtualMachineManagerImpl" />
</map>
</property>
</bean>
<bean id= "vmWorkJobWakeupDispatcher" class="com.cloud.vm.VmWorkJobWakeupDispatcher">
<property name="name">

View File

@ -21,22 +21,22 @@ import com.cloud.network.Network;
public class VmWorkAddVmToNetwork extends VmWork {
private static final long serialVersionUID = 8861516006586736813L;
Network network;
NicProfile requstedNicProfile;
public VmWorkAddVmToNetwork(long userId, long accountId, long vmId,
Network network, NicProfile requested) {
super(userId, accountId, vmId);
this.network = network;
this.requstedNicProfile = requested;
}
public Network getNetwork() {
return this.network;
}
public NicProfile getRequestedNicProfile() {
return this.requstedNicProfile;
}
Network network;
NicProfile requstedNicProfile;
public VmWorkAddVmToNetwork(long userId, long accountId, long vmId, String handlerName,
Network network, NicProfile requested) {
super(userId, accountId, vmId, handlerName);
this.network = network;
requstedNicProfile = requested;
}
public Network getNetwork() {
return network;
}
public NicProfile getRequestedNicProfile() {
return requstedNicProfile;
}
}

View File

@ -16,9 +16,12 @@
// under the License.
package com.cloud.vm;
import java.util.Map;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
@ -26,6 +29,7 @@ import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
import org.apache.cloudstack.jobs.JobInfo;
import com.cloud.utils.Pair;
import com.cloud.utils.component.AdapterBase;
import com.cloud.vm.dao.VMInstanceDao;
@ -35,15 +39,25 @@ public class VmWorkJobDispatcher extends AdapterBase implements AsyncJobDispatch
public static final String VM_WORK_QUEUE = "VmWorkJobQueue";
public static final String VM_WORK_JOB_DISPATCHER = "VmWorkJobDispatcher";
public static final String VM_WORK_JOB_WAKEUP_DISPATCHER = "VmWorkJobWakeupDispatcher";
@Inject private VirtualMachineManagerImpl _vmMgr;
@Inject private AsyncJobManager _asyncJobMgr;
@Inject private VMInstanceDao _instanceDao;
private Map<String, VmWorkJobHandler> _handlers;
@Inject
private VirtualMachineManagerImpl _vmMgr;
@Inject
private AsyncJobManager _asyncJobMgr;
@Inject
private VMInstanceDao _instanceDao;
public VmWorkJobDispatcher() {
}
@Override
public Map<String, VmWorkJobHandler> getHandlers() {
return _handlers;
}
public void setHandlers(Map<String, VmWorkJobHandler> handlers) {
_handlers = handlers;
}
@Override
public void runJob(AsyncJob job) {
VmWork work = null;
try {
@ -69,80 +83,26 @@ public class VmWorkJobDispatcher extends AdapterBase implements AsyncJobDispatch
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.FAILED, 0, "Unable to deserialize VM work");
return;
}
if (_handlers == null || _handlers.isEmpty()) {
s_logger.error("Invalid startup configuration, no work job handler is found. cmd: " + job.getCmd() + ", job info: " + job.getCmdInfo());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.FAILED, 0, "Invalid startup configuration. no job handler is found");
return;
}
VmWorkJobHandler handler = _handlers.get(work.getHandlerName());
if (handler == null) {
s_logger.error("Unable to find work job handler. handler name: " + work.getHandlerName() + ", job cmd: " + job.getCmd() + ", job info: " + job.getCmdInfo());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.FAILED, 0, "Unable to find work job handler");
return;
}
CallContext.register(work.getUserId(), work.getAccountId(), job.getRelated());
VMInstanceVO vm = _instanceDao.findById(work.getVmId());
if (vm == null) {
s_logger.info("Unable to find vm " + work.getVmId());
}
assert (vm != null);
if (work instanceof VmWorkStart) {
VmWorkStart workStart = (VmWorkStart)work;
_vmMgr.orchestrateStart(vm.getUuid(), workStart.getParams(), workStart.getPlan());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkStop) {
VmWorkStop workStop = (VmWorkStop)work;
_vmMgr.orchestrateStop(vm.getUuid(), workStop.isCleanup());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkMigrate) {
VmWorkMigrate workMigrate = (VmWorkMigrate)work;
_vmMgr.orchestrateMigrate(vm.getUuid(), workMigrate.getSrcHostId(), workMigrate.getDeployDestination());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkMigrateWithStorage) {
VmWorkMigrateWithStorage workMigrateWithStorage = (VmWorkMigrateWithStorage)work;
_vmMgr.orchestrateMigrateWithStorage(vm.getUuid(),
workMigrateWithStorage.getSrcHostId(),
workMigrateWithStorage.getDestHostId(),
workMigrateWithStorage.getVolumeToPool());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkMigrateForScale) {
VmWorkMigrateForScale workMigrateForScale = (VmWorkMigrateForScale)work;
_vmMgr.orchestrateMigrateForScale(vm.getUuid(),
workMigrateForScale.getSrcHostId(),
workMigrateForScale.getDeployDestination(),
workMigrateForScale.getNewServiceOfferringId());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkReboot) {
VmWorkReboot workReboot = (VmWorkReboot)work;
_vmMgr.orchestrateReboot(vm.getUuid(), workReboot.getParams());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkAddVmToNetwork) {
VmWorkAddVmToNetwork workAddVmToNetwork = (VmWorkAddVmToNetwork)work;
NicProfile nic = _vmMgr.orchestrateAddVmToNetwork(vm, workAddVmToNetwork.getNetwork(),
workAddVmToNetwork.getRequestedNicProfile());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0,
JobSerializerHelper.toObjectSerializedString(nic));
} else if (work instanceof VmWorkRemoveNicFromVm) {
VmWorkRemoveNicFromVm workRemoveNicFromVm = (VmWorkRemoveNicFromVm)work;
boolean result = _vmMgr.orchestrateRemoveNicFromVm(vm, workRemoveNicFromVm.getNic());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0,
JobSerializerHelper.toObjectSerializedString(new Boolean(result)));
} else if (work instanceof VmWorkRemoveVmFromNetwork) {
VmWorkRemoveVmFromNetwork workRemoveVmFromNetwork = (VmWorkRemoveVmFromNetwork)work;
boolean result = _vmMgr.orchestrateRemoveVmFromNetwork(vm,
workRemoveVmFromNetwork.getNetwork(), workRemoveVmFromNetwork.getBroadcastUri());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0,
JobSerializerHelper.toObjectSerializedString(new Boolean(result)));
} else if (work instanceof VmWorkReconfigure) {
VmWorkReconfigure workReconfigure = (VmWorkReconfigure)work;
_vmMgr.reConfigureVm(vm.getUuid(), workReconfigure.getNewServiceOffering(),
workReconfigure.isSameHost());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else if (work instanceof VmWorkStorageMigration) {
VmWorkStorageMigration workStorageMigration = (VmWorkStorageMigration)work;
_vmMgr.orchestrateStorageMigration(vm.getUuid(), workStorageMigration.getDestStoragePool());
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.SUCCEEDED, 0, null);
} else {
assert (false);
s_logger.error("Unhandled VM work command: " + job.getCmd());
RuntimeException e = new RuntimeException("Unsupported VM work command: " + job.getCmd());
String exceptionJson = JobSerializerHelper.toSerializedString(e);
s_logger.error("Serialize exception object into json: " + exceptionJson);
_asyncJobMgr.completeAsyncJob(job.getId(), JobInfo.Status.FAILED, 0, exceptionJson);
}
} catch (Throwable e) {
Pair<JobInfo.Status, String> result = handler.handleVmWorkJob(job, work);
_asyncJobMgr.completeAsyncJob(job.getId(), result.first(), 0, result.second());
} catch(Throwable e) {
s_logger.error("Unable to complete " + job, e);
String exceptionJson = JobSerializerHelper.toSerializedString(e);

View File

@ -0,0 +1,26 @@
// 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.vm;
import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.jobs.JobInfo;
import com.cloud.utils.Pair;
public interface VmWorkJobHandler {
Pair<JobInfo.Status, String> handleVmWorkJob(AsyncJob job, VmWork work) throws Exception;
}

View File

@ -38,8 +38,9 @@ public class VmWorkMigrate extends VmWork {
private Map<String, String> storage;
long srcHostId;
public VmWorkMigrate(long userId, long accountId, long vmId, long srcHostId, DeployDestination dst) {
super(userId, accountId, vmId);
public VmWorkMigrate(long userId, long accountId, long vmId, String handlerName,
long srcHostId, DeployDestination dst) {
super(userId, accountId, vmId, handlerName);
this.srcHostId = srcHostId;
zoneId = dst.getDataCenter() != null ? dst.getDataCenter().getId() : null;
podId = dst.getPod() != null ? dst.getPod().getId() : null;

View File

@ -19,19 +19,19 @@ package com.cloud.vm;
import com.cloud.deploy.DeployDestination;
public class VmWorkMigrateForScale extends VmWork {
private static final long serialVersionUID = 6854870395568389613L;
private static final long serialVersionUID = 6854870395568389613L;
long srcHostId;
DeployDestination deployDestination;
Long newSvcOfferingId;
public VmWorkMigrateForScale(long userId, long accountId, long vmId, long srcHostId,
DeployDestination dest, Long newSvcOfferingId) {
super(userId, accountId, vmId);
this.srcHostId = srcHostId;
this.deployDestination = dest;
this.newSvcOfferingId = newSvcOfferingId;
long srcHostId;
DeployDestination deployDestination;
Long newSvcOfferingId;
public VmWorkMigrateForScale(long userId, long accountId, long vmId, String handlerName, long srcHostId,
DeployDestination dest, Long newSvcOfferingId) {
super(userId, accountId, vmId, handlerName);
this.srcHostId = srcHostId;
deployDestination = dest;
this.newSvcOfferingId = newSvcOfferingId;
}
public long getSrcHostId() {
@ -39,10 +39,10 @@ public class VmWorkMigrateForScale extends VmWork {
}
public DeployDestination getDeployDestination() {
return this.deployDestination;
return deployDestination;
}
public Long getNewServiceOfferringId() {
return this.newSvcOfferingId;
return newSvcOfferingId;
}
}

View File

@ -22,31 +22,31 @@ import com.cloud.storage.StoragePool;
import com.cloud.storage.Volume;
public class VmWorkMigrateWithStorage extends VmWork {
private static final long serialVersionUID = -5626053872453569165L;
private static final long serialVersionUID = -5626053872453569165L;
long srcHostId;
long destHostId;
Map<Volume, StoragePool> volumeToPool;
public VmWorkMigrateWithStorage(long userId, long accountId, long vmId, long srcHostId,
long destHostId, Map<Volume, StoragePool> volumeToPool) {
super(userId, accountId, vmId);
this.srcHostId = srcHostId;
this.destHostId = destHostId;
this.volumeToPool = volumeToPool;
long srcHostId;
long destHostId;
Map<Volume, StoragePool> volumeToPool;
public VmWorkMigrateWithStorage(long userId, long accountId, long vmId, String handlerName, long srcHostId,
long destHostId, Map<Volume, StoragePool> volumeToPool) {
super(userId, accountId, vmId, handlerName);
this.srcHostId = srcHostId;
this.destHostId = destHostId;
this.volumeToPool = volumeToPool;
}
public long getSrcHostId() {
return this.srcHostId;
return srcHostId;
}
public long getDestHostId() {
return this.destHostId;
return destHostId;
}
public Map<Volume, StoragePool> getVolumeToPool() {
return this.volumeToPool;
return volumeToPool;
}
}

View File

@ -28,18 +28,10 @@ public class VmWorkReboot extends VmWork {
// use serialization friendly map
private Map<String, String> rawParams;
public VmWorkReboot(long userId, long accountId, long vmId, Map<VirtualMachineProfile.Param, Object> params) {
super(userId, accountId, vmId);
setParams(params);
}
public Map<String, String> getRawParams() {
return rawParams;
}
public void setRawParams(Map<String, String> params) {
rawParams = params;
public VmWorkReboot(long userId, long accountId, long vmId, String handlerName, Map<VirtualMachineProfile.Param, Object> params) {
super(userId, accountId, vmId, handlerName);
setParams(params);
}
public Map<VirtualMachineProfile.Param, Object> getParams() {

View File

@ -19,25 +19,25 @@ package com.cloud.vm;
import com.cloud.offering.ServiceOffering;
public class VmWorkReconfigure extends VmWork {
private static final long serialVersionUID = -4517030323758086615L;
ServiceOffering newServiceOffering;
boolean sameHost;
public VmWorkReconfigure(long userId, long accountId, long vmId,
ServiceOffering newServiceOffering, boolean sameHost) {
super(userId, accountId, vmId);
this.newServiceOffering = newServiceOffering;
this.sameHost = sameHost;
private static final long serialVersionUID = -4517030323758086615L;
ServiceOffering newServiceOffering;
boolean sameHost;
public VmWorkReconfigure(long userId, long accountId, long vmId, String handlerName,
ServiceOffering newServiceOffering, boolean sameHost) {
super(userId, accountId, vmId, handlerName);
this.newServiceOffering = newServiceOffering;
this.sameHost = sameHost;
}
public ServiceOffering getNewServiceOffering() {
return this.newServiceOffering;
return newServiceOffering;
}
public boolean isSameHost() {
return this.sameHost;
return sameHost;
}
}

View File

@ -19,15 +19,15 @@ package com.cloud.vm;
public class VmWorkRemoveNicFromVm extends VmWork {
private static final long serialVersionUID = -4265657031064437923L;
Nic nic;
public VmWorkRemoveNicFromVm(long userId, long accountId, long vmId, Nic nic) {
super(userId, accountId, vmId);
this.nic = nic;
Nic nic;
public VmWorkRemoveNicFromVm(long userId, long accountId, long vmId, String handlerName, Nic nic) {
super(userId, accountId, vmId, handlerName);
this.nic = nic;
}
public Nic getNic() {
return this.nic;
return nic;
}
}

View File

@ -21,23 +21,23 @@ import java.net.URI;
import com.cloud.network.Network;
public class VmWorkRemoveVmFromNetwork extends VmWork {
private static final long serialVersionUID = -5070392905642149925L;
private static final long serialVersionUID = -5070392905642149925L;
Network network;
URI broadcastUri;
public VmWorkRemoveVmFromNetwork(long userId, long accountId, long vmId, Network network, URI broadcastUri) {
super(userId, accountId, vmId);
this.network = network;
this.broadcastUri = broadcastUri;
}
public Network getNetwork() {
return this.network;
}
public URI getBroadcastUri() {
return this.broadcastUri;
}
Network network;
URI broadcastUri;
public VmWorkRemoveVmFromNetwork(long userId, long accountId, long vmId, String handlerName, Network network, URI broadcastUri) {
super(userId, accountId, vmId, handlerName);
this.network = network;
this.broadcastUri = broadcastUri;
}
public Network getNetwork() {
return network;
}
public URI getBroadcastUri() {
return broadcastUri;
}
}

View File

@ -50,76 +50,76 @@ public class VmWorkStart extends VmWork {
// use serialization friendly map
private Map<String, String> rawParams;
public VmWorkStart(long userId, long accountId, long vmId) {
super(userId, accountId, vmId);
}
public VmWorkStart(long userId, long accountId, long vmId, String handlerName) {
super(userId, accountId, vmId, handlerName);
}
public DeploymentPlan getPlan() {
public DeploymentPlan getPlan() {
if(podId != null || clusterId != null || hostId != null || poolId != null || physicalNetworkId != null) {
// this is ugly, to work with legacy code, we need to re-construct the DeploymentPlan hard-codely
// this has to be refactored together with migrating legacy code into the new way
ReservationContext context = null;
if(reservationId != null) {
Journal journal = new Journal.LogJournal("VmWorkStart", s_logger);
context = new ReservationContextImpl(reservationId, journal,
CallContext.current().getCallingUser(),
CallContext.current().getCallingAccount());
}
DeploymentPlan plan = new DataCenterDeployment(
dcId, podId, clusterId, hostId, poolId, physicalNetworkId,
context);
return plan;
}
return null;
}
if (podId != null || clusterId != null || hostId != null || poolId != null || physicalNetworkId != null) {
// this is ugly, to work with legacy code, we need to re-construct the DeploymentPlan hard-codely
// this has to be refactored together with migrating legacy code into the new way
ReservationContext context = null;
if (reservationId != null) {
Journal journal = new Journal.LogJournal("VmWorkStart", s_logger);
context = new ReservationContextImpl(reservationId, journal,
CallContext.current().getCallingUser(),
CallContext.current().getCallingAccount());
}
public void setPlan(DeploymentPlan plan) {
if(plan != null) {
dcId = plan.getDataCenterId();
podId = plan.getPodId();
clusterId = plan.getClusterId();
hostId = plan.getHostId();
poolId = plan.getPoolId();
physicalNetworkId = plan.getPhysicalNetworkId();
avoids = plan.getAvoids();
if(plan.getReservationContext() != null)
reservationId = plan.getReservationContext().getReservationId();
}
}
DeploymentPlan plan = new DataCenterDeployment(
dcId, podId, clusterId, hostId, poolId, physicalNetworkId,
context);
return plan;
}
public Map<String, String> getRawParams() {
return rawParams;
}
return null;
}
public void setPlan(DeploymentPlan plan) {
if (plan != null) {
dcId = plan.getDataCenterId();
podId = plan.getPodId();
clusterId = plan.getClusterId();
hostId = plan.getHostId();
poolId = plan.getPoolId();
physicalNetworkId = plan.getPhysicalNetworkId();
avoids = plan.getAvoids();
if (plan.getReservationContext() != null)
reservationId = plan.getReservationContext().getReservationId();
}
}
public Map<String, String> getRawParams() {
return rawParams;
}
public void setRawParams(Map<String, String> params) {
rawParams = params;
}
public Map<VirtualMachineProfile.Param, Object> getParams() {
Map<VirtualMachineProfile.Param, Object> map = new HashMap<VirtualMachineProfile.Param, Object>();
if (rawParams != null) {
for (Map.Entry<String, String> entry : rawParams.entrySet()) {
VirtualMachineProfile.Param key = new VirtualMachineProfile.Param(entry.getKey());
Object val = JobSerializerHelper.fromObjectSerializedString(entry.getValue());
map.put(key, val);
}
}
return map;
}
public void setParams(Map<VirtualMachineProfile.Param, Object> params) {
if (params != null) {
rawParams = new HashMap<String, String>();
for (Map.Entry<VirtualMachineProfile.Param, Object> entry : params.entrySet()) {
rawParams.put(entry.getKey().getName(), JobSerializerHelper.toObjectSerializedString(
entry.getValue() instanceof Serializable ? (Serializable)entry.getValue() : entry.getValue().toString()));
}
}
}
public void setRawParams(Map<String, String> params) {
rawParams = params;
}
public Map<VirtualMachineProfile.Param, Object> getParams() {
Map<VirtualMachineProfile.Param, Object> map = new HashMap<VirtualMachineProfile.Param, Object>();
if(rawParams != null) {
for(Map.Entry<String, String> entry : rawParams.entrySet()) {
VirtualMachineProfile.Param key = new VirtualMachineProfile.Param(entry.getKey());
Object val = JobSerializerHelper.fromObjectSerializedString(entry.getValue());
map.put(key, val);
}
}
return map;
}
public void setParams(Map<VirtualMachineProfile.Param, Object> params) {
if(params != null) {
rawParams = new HashMap<String, String>();
for(Map.Entry<VirtualMachineProfile.Param, Object> entry : params.entrySet()) {
rawParams.put(entry.getKey().getName(), JobSerializerHelper.toObjectSerializedString(
entry.getValue() instanceof Serializable ? (Serializable)entry.getValue() : entry.getValue().toString()));
}
}
}
}

View File

@ -17,12 +17,12 @@
package com.cloud.vm;
public class VmWorkStop extends VmWork {
private static final long serialVersionUID = 202908740486785251L;
private final boolean cleanup;
public VmWorkStop(long userId, long accountId, long vmId, boolean cleanup) {
super(userId, accountId, vmId);
private static final long serialVersionUID = 202908740486785251L;
private final boolean cleanup;
public VmWorkStop(long userId, long accountId, long vmId, String handlerName, boolean cleanup) {
super(userId, accountId, vmId, handlerName);
this.cleanup = cleanup;
}

View File

@ -23,13 +23,13 @@ public class VmWorkStorageMigration extends VmWork {
StoragePool destPool;
public VmWorkStorageMigration(long userId, long accountId, long vmId, StoragePool destPool) {
super(userId, accountId, vmId);
this.destPool = destPool;
public VmWorkStorageMigration(long userId, long accountId, long vmId, String handlerName, StoragePool destPool) {
super(userId, accountId, vmId, handlerName);
this.destPool = destPool;
}
public StoragePool getDestStoragePool() {
return this.destPool;
return destPool;
}
}

View File

@ -20,11 +20,16 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
>
<bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl">
@ -230,5 +235,4 @@
class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
<bean id="certServiceImpl" class="org.apache.cloudstack.network.lb.CertServiceImpl" />
</beans>