From 5ad07e899b1145865428cba42ec7829939bab770 Mon Sep 17 00:00:00 2001 From: kishan Date: Thu, 30 Dec 2010 16:15:21 +0530 Subject: [PATCH] bug 7768,7770: Corrected VM destroy events, removed duplicate completed event, added startId and started event status 7768,7770: resolved fixed --- .../async/executor/DestroyVMExecutor.java | 20 ++++++++++++++----- .../src/com/cloud/vm/UserVmManagerImpl.java | 12 ----------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/server/src/com/cloud/async/executor/DestroyVMExecutor.java b/server/src/com/cloud/async/executor/DestroyVMExecutor.java index d44d57945c7..c2aa103a8fa 100644 --- a/server/src/com/cloud/async/executor/DestroyVMExecutor.java +++ b/server/src/com/cloud/async/executor/DestroyVMExecutor.java @@ -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); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 21ad4beb84a..fbf3ea00089 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -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());