bug 7768,7770: Corrected VM destroy events, removed duplicate completed event, added startId and started event

status 7768,7770: resolved fixed
This commit is contained in:
kishan 2010-12-30 16:15:21 +05:30
parent fa84270b3e
commit 5ad07e899b
2 changed files with 15 additions and 17 deletions

View File

@ -34,6 +34,7 @@ import com.cloud.event.EventVO;
import com.cloud.serializer.GsonHelper;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.Volume.VolumeType;
import com.cloud.user.Account;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction;
import com.cloud.vm.UserVmVO;
@ -58,7 +59,15 @@ public class DestroyVMExecutor extends VMOperationExecutor {
return true;
} else {
VMOperationParam param = gson.fromJson(job.getCmdInfo(), VMOperationParam.class);
asyncMgr.updateAsyncJobAttachment(job.getId(), "vm_instance", param.getVmId());
asyncMgr.updateAsyncJobAttachment(job.getId(), "vm_instance", param.getVmId());
EventVO event = new EventVO();
event.setUserId(param.getUserId());
event.setAccountId(Account.ACCOUNT_ID_SYSTEM);
event.setStartId(param.getEventId());
event.setState(EventState.Started);
event.setType(EventTypes.EVENT_VM_DESTROY);
event.setDescription("Starting to destroy VM with Id: " + param.getVmId());
asyncMgr.getExecutorContext().getEventDao().persist(event);
return asyncMgr.getExecutorContext().getVmMgr().executeDestroyVM(this, param);
}
}
@ -77,7 +86,6 @@ public class DestroyVMExecutor extends VMOperationExecutor {
event.setUserId(param.getUserId());
event.setAccountId(vm.getAccountId());
event.setState(EventState.Completed);
event.setStartId(param.getEventId());
event.setType(EventTypes.EVENT_VM_STOP);
event.setParameters("id="+vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId());
@ -87,14 +95,15 @@ public class DestroyVMExecutor extends VMOperationExecutor {
try {
if(stopped) {
asyncMgr.getExecutorContext().getVmMgr().completeStopCommand(param.getUserId(), vm, Event.OperationSucceeded, param.getEventId());
asyncMgr.getExecutorContext().getVmMgr().completeStopCommand(param.getUserId(), vm, Event.OperationSucceeded, 0);
// completeStopCommand will log the stop event, if we log it here we will end up with duplicated stop event
Transaction txn = Transaction.currentTxn();
txn.start();
event = new EventVO();
event.setUserId(param.getUserId());
event.setAccountId(vm.getAccountId());
event.setAccountId(vm.getAccountId());
event.setStartId(param.getEventId());
event.setType(EventTypes.EVENT_VM_DESTROY);
event.setParameters("id="+vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId());
event.setDescription("successfully destroyed VM instance : " + vm.getName());
@ -167,7 +176,8 @@ public class DestroyVMExecutor extends VMOperationExecutor {
EventVO event = new EventVO();
event.setUserId(param.getUserId());
event.setAccountId(vm.getAccountId());
event.setType(EventTypes.EVENT_VM_DESTROY);
event.setType(EventTypes.EVENT_VM_DESTROY);
event.setStartId(param.getEventId());
event.setParameters("id="+vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId());
event.setDescription("failed to stop VM instance : " + vm.getName() + " due to " + resultMessage);
event.setLevel(EventVO.LEVEL_ERROR);

View File

@ -1479,18 +1479,6 @@ public class UserVmManagerImpl implements UserVmManager {
Transaction txn = Transaction.currentTxn();
txn.start();
EventVO event = new EventVO();
event.setUserId(param.getUserId());
event.setAccountId(vm.getAccountId());
event.setType(EventTypes.EVENT_VM_DESTROY);
event.setStartId(param.getEventId());
event.setParameters("id="+vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId());
if(!vm.getName().equals(vm.getDisplayName()))
event.setDescription("successfully destroyed VM instance : " + vm.getName()+"("+vm.getDisplayName()+")");
else
event.setDescription("successfully destroyed VM instance : " + vm.getName());
_eventDao.persist(event);
_accountMgr.decrementResourceCount(vm.getAccountId(), ResourceType.user_vm);
if (!_vmDao.updateIf(vm, VirtualMachine.Event.DestroyRequested, vm.getHostId())) {
s_logger.debug("Unable to destroy the vm because it is not in the correct state: " + vm.toString());