From 3986a49fb7548b49516ddcf73a522c6b5f6fb19e Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 3 May 2024 02:55:41 +0530 Subject: [PATCH] server,test: fix resourceid for VOLUME.DETROY in restore VM Destroy old ROOT volume for the VM to be restored in its own context to allow event to be published with resourceid. Fixes exception in test_event_resources.py Signed-off-by: Abhishek Kumar --- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +- test/integration/smoke/test_events_resource.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 4283b44e171e..3c1720514634 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -7909,7 +7909,7 @@ public Pair doInTransaction(final TransactionStatus status) th // Detach, destroy and create the usage event for the old root volume. _volsDao.detachVolume(root.getId()); - _volumeService.destroyVolume(root.getId(), caller, Volume.State.Allocated.equals(root.getState()) || expunge, false); + destroyVolumeInContext(vm, Volume.State.Allocated.equals(root.getState()) || expunge, root); // For VMware hypervisor since the old root volume is replaced by the new root volume, force expunge old root volume if it has been created in storage if (vm.getHypervisorType() == HypervisorType.VMware) { diff --git a/test/integration/smoke/test_events_resource.py b/test/integration/smoke/test_events_resource.py index 660cbd37bced..794431109506 100644 --- a/test/integration/smoke/test_events_resource.py +++ b/test/integration/smoke/test_events_resource.py @@ -116,6 +116,7 @@ def test_01_events_resource(self): self.services["domain"], parentdomainid=self.domain.id ) + self.cleanup.append(domain1) self.services["domainid"] = domain1.id account = Account.create( @@ -123,6 +124,7 @@ def test_01_events_resource(self): self.services["account"], domainid=domain1.id ) + self.cleanup.append(account) account_network = Network.create( self.apiclient, @@ -130,6 +132,7 @@ def test_01_events_resource(self): account.name, account.domainid ) + self.cleanup.append(account_network) virtual_machine = VirtualMachine.create( self.apiclient, self.services, @@ -138,6 +141,7 @@ def test_01_events_resource(self): networkids=account_network.id, serviceofferingid=self.service_offering.id ) + self.cleanup.append(virtual_machine) volume = Volume.create( self.apiclient, self.services, @@ -146,6 +150,7 @@ def test_01_events_resource(self): domainid=account.domainid, diskofferingid=self.disk_offering.id ) + self.cleanup.append(volume) virtual_machine.attach_volume( self.apiclient, volume @@ -157,15 +162,20 @@ def test_01_events_resource(self): time.sleep(self.services["sleep"]) virtual_machine.detach_volume(self.apiclient, volume) volume.delete(self.apiclient) + self.cleanup.remove(volume) ts = str(time.time()) virtual_machine.update(self.apiclient, displayname=ts) virtual_machine.delete(self.apiclient) + self.cleanup.remove(virtual_machine) account_network.update(self.apiclient, name=account_network.name + ts) account_network.delete(self.apiclient) + self.cleanup.remove(account_network) account.update(self.apiclient, newname=account.name + ts) account.disable(self.apiclient) account.delete(self.apiclient) + self.cleanup.remove(account) domain1.delete(self.apiclient) + self.cleanup.remove(domain1) cmd = listEvents.listEventsCmd() cmd.startdate = start_time @@ -185,8 +195,9 @@ def test_01_events_resource(self): for event in events: if event.type.startswith("VM.") or (event.type.startswith("NETWORK.") and not event.type.startswith("NETWORK.ELEMENT")) or event.type.startswith("VOLUME.") or event.type.startswith("ACCOUNT.") or event.type.startswith("DOMAIN.") or event.type.startswith("TEMPLATE."): if event.resourceid is None or event.resourcetype is None: - self.debug("Failed event:: %s" % json.dumps(event, indent=2)) - self.fail("resourceid or resourcetype for the event not found!") + event_json = json.dumps(event.__dict__, indent=2) + self.debug("Failed event:: %s" % event_json) + self.fail("resourceid or resourcetype not found for the event: %s" % event_json) else: self.debug("Event %s at %s:: Resource Type: %s, Resource ID: %s" % (event.type, event.created, event.resourcetype, event.resourceid))