Bug 880169
Summary: | ovrit-engine-backend:.rollbackQuota ignores disabled quota | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Red Hat Enterprise Virtualization Manager | Reporter: | Omri Hochman <ohochman> | ||||||
Component: | ovirt-engine | Assignee: | Doron Fediuck <dfediuck> | ||||||
Status: | CLOSED CURRENTRELEASE | QA Contact: | yeylon <yeylon> | ||||||
Severity: | medium | Docs Contact: | |||||||
Priority: | medium | ||||||||
Version: | 3.1.0 | CC: | acathrow, cpelland, dfediuck, iheim, jkt, lpeer, oramraz, Rhev-m-bugs, srevivo, yeylon | ||||||
Target Milestone: | --- | Keywords: | ZStream | ||||||
Target Release: | 3.2.0 | ||||||||
Hardware: | x86_64 | ||||||||
OS: | Linux | ||||||||
Whiteboard: | sla | ||||||||
Fixed In Version: | SF1 | Doc Type: | Bug Fix | ||||||
Doc Text: | Story Points: | --- | |||||||
Clone Of: | |||||||||
: | 881783 (view as bug list) | Environment: | |||||||
Last Closed: | 2014-03-26 21:06:05 UTC | Type: | Bug | ||||||
Regression: | --- | Mount Type: | --- | ||||||
Documentation: | --- | CRM: | |||||||
Verified Versions: | Category: | --- | |||||||
oVirt Team: | SLA | RHEL 7.3 requirements from Atomic Host: | |||||||
Cloudforms Team: | --- | Target Upstream Version: | |||||||
Embargoed: | |||||||||
Bug Depends On: | |||||||||
Bug Blocks: | 881783 | ||||||||
Attachments: |
|
Description
Omri Hochman
2012-11-26 12:28:27 UTC
Created attachment 651934 [details]
console.log
(In reply to comment #0) (snip) > > Results: > ******* > A) .rollbackQuota is querying twice ".DiskDaoDbFacadeImpl.getAllForVm" for > each vmAction. Need verification on this item. > B) .rollbackQuota should call those queries only when: > - Quota is enabled on DC. Agreed. > - The VMs are stateless. > Not exactly. The storage part should be handled only for stateless. Otherwise each stopped VM needs to release the run-time quota, so roll-back is needed. (In reply to comment #2) > (In reply to comment #0) (snip) > > > > Results: > > ******* > > A) .rollbackQuota is querying twice ".DiskDaoDbFacadeImpl.getAllForVm" for > > each vmAction. > > Need verification on this item. > After checking it, this is a misunderstanding, since we have function overloading. No need for a fix here. > > B) .rollbackQuota should call those queries only when: > > - Quota is enabled on DC. > > Agreed. > The only fix needed here is check for quota state (ie0 not disabled), and improve by handling storage just for stateless VMs. Removed the 3.2 flag, as this issue is relevant for 3.1.z only. In 3.2 we have quota improvements which removed these code parts. (In reply to comment #4) > Removed the 3.2 flag, as this issue is relevant for 3.1.z only. > In 3.2 we have quota improvements which removed these code parts. Still has to have the flag for QE to verify there is no regression. Created attachment 654550 [details]
engine.log
Posted to downstream: https://gerrit.eng.lab.tlv.redhat.com/#/c/3500/ Omri, Please rerun the test to verify the fix. Fix looks OK with the provided .jar - there were no calls for '.rollbackQuota': ******************************************************************************* "pool-3-thread-50" prio=10 tid=0x00007f8d8c195000 nid=0x503b waiting on condition [0x00007f8d4dd5b000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000ef081f08> (a java.util.concurrent.FutureTask$Sync) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1033) at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326) at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:257) at java.util.concurrent.FutureTask.get(FutureTask.java:119) at org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcUtils$AsyncProxy.invoke(XmlRpcUtils.java:160) at $Proxy29.destroy(Unknown Source) at org.ovirt.engine.core.vdsbroker.vdsbroker.VdsServerWrapper.destroy(VdsServerWrapper.java:45) at org.ovirt.engine.core.vdsbroker.vdsbroker.DestroyVDSCommand.ExecuteVdsBrokerCommand(DestroyVDSCommand.java:19) at org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand.ExecuteVDSCommand(VdsBrokerCommand.java:91) at org.ovirt.engine.core.vdsbroker.VDSCommandBase.ExecuteCommand(VDSCommandBase.java:63) at org.ovirt.engine.core.dal.VdcCommandBase.Execute(VdcCommandBase.java:41) at org.ovirt.engine.core.vdsbroker.DestroyVmVDSCommand.ExecuteVdsIdCommand(DestroyVmVDSCommand.java:36) at org.ovirt.engine.core.vdsbroker.VdsIdVDSCommandBase.ExecuteVDSCommand(VdsIdVDSCommandBase.java:49) - locked <0x00000000c3512038> (a java.lang.Object) at org.ovirt.engine.core.vdsbroker.VDSCommandBase.ExecuteCommand(VDSCommandBase.java:63) at org.ovirt.engine.core.dal.VdcCommandBase.Execute(VdcCommandBase.java:41) at org.ovirt.engine.core.vdsbroker.ResourceManager.runVdsCommand(ResourceManager.java:388) at org.ovirt.engine.core.bll.VDSBrokerFrontendImpl.RunVdsCommand(VDSBrokerFrontendImpl.java:33) at org.ovirt.engine.core.bll.StopVmCommandBase.Destroy(StopVmCommandBase.java:80) at org.ovirt.engine.core.bll.StopVmCommand.Perform(StopVmCommand.java:15) at org.ovirt.engine.core.bll.VmOperationCommandBase.ExecuteVmCommand(VmOperationCommandBase.java:34) at org.ovirt.engine.core.bll.StopVmCommandBase.ExecuteVmCommand(StopVmCommandBase.java:95) at org.ovirt.engine.core.bll.VmCommand.executeCommand(VmCommand.java:78) at org.ovirt.engine.core.bll.CommandBase.executeWithoutTransaction(CommandBase.java:876) at org.ovirt.engine.core.bll.CommandBase.executeActionInTransactionScope(CommandBase.java:973) at org.ovirt.engine.core.bll.CommandBase.runInTransaction(CommandBase.java:1372) at org.ovirt.engine.core.utils.transaction.TransactionSupport.executeInSuppressed(TransactionSupport.java:168) at org.ovirt.engine.core.utils.transaction.TransactionSupport.executeInScope(TransactionSupport.java:107) at org.ovirt.engine.core.bll.CommandBase.execute(CommandBase.java:991) at org.ovirt.engine.core.bll.CommandBase.executeAction(CommandBase.java:291) at org.ovirt.engine.core.bll.MultipleActionsRunner.executeValidatedCommands(MultipleActionsRunner.java:182) at org.ovirt.engine.core.bll.MultipleActionsRunner.RunCommands(MultipleActionsRunner.java:162) at org.ovirt.engine.core.bll.MultipleActionsRunner$1.run(MultipleActionsRunner.java:84) at org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil$InternalWrapperRunnable.run(ThreadPoolUtil.java:64) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) Fix verified by Omri Hochman No regression found after implementing the fix on my environment. there were no calls by '.rollbackQuota' when quota is disabled. No issues are found Verified, tested on RHEVM 3.3 - IS6 environment: RHEVM: rhevm-3.3.0-0.9.master.el6ev.noarch VDSM: vdsm-4.12.0-rc1.12.git8ee6885.el6.x86_64 LIBVIRT: libvirt-0.10.2-18.el6_4.9.x86_64 QEMU & KVM: qemu-kvm-rhev-0.12.1.2-2.355.el6_4.5.x86_64 SANLOCK: sanlock-2.6-2.el6.x86_64 |