Eli Mesika has submitted this change and it was merged.
Change subject: core: Prevent dead lock on vm device (#852451)
......................................................................
core: Prevent dead lock on vm device (#852451)
https://bugzilla.redhat.com/852451
This patch should be tested for regressions by pre-integration.
The following patch solved a dead lock on vm device:
Both VdsUpdateRuntimeInfo and HotPlugDisk update a collection of VmDevices.
The devices are unordered, so a dead lock may occur.
This patch solves the issue the following way:
a. Orders VM devices fetched from DB (uses device_id as sorting column).
b. Changes HotplugDisk to perform update for both plugged flag and boot order
in the same area of code
c. Changes HotplugDisk to update only boot order and plugged fields of vm device
d. Changes VdsUpdateRuntime info to update only the alias and address fields
c and d are performed in order to avoid data races between the two concurrent flows
We have discussed about using an optimistic lock mechanism at first, but using c and d ,
lets us have a KISS approach to the solution
Change-Id: If316259f9760777c5f85db0880a157021c61a6ba
Signed-off-by: Yair Zaslavsky <yzaslavs(a)redhat.com>
Signed-off-by: Eli Mesika <emesika(a)redhat.com>
---
M backend/manager/dbscripts/vm_device_sp.sql
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
M
backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/businessentities/VmDeviceTest.java
M
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java
M
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java
M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
M
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
M
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
13 files changed, 217 insertions(+), 42 deletions(-)
Approvals:
Eli Mesika: Verified; Looks good to me, approved
--
To view, visit
http://gerrit.ovirt.org/7641
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If316259f9760777c5f85db0880a157021c61a6ba
Gerrit-PatchSet: 7
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <yzaslavs(a)redhat.com>
Gerrit-Reviewer: Barak Azulay <bazulay(a)redhat.com>
Gerrit-Reviewer: Eli Mesika <emesika(a)redhat.com>
Gerrit-Reviewer: Michael Kublin <mkublin(a)redhat.com>
Gerrit-Reviewer: Roy Golan <rgolan(a)redhat.com>
Gerrit-Reviewer: Yair Zaslavsky <yzaslavs(a)redhat.com>
Gerrit-Reviewer: oVirt Jenkins CI Server