Change in ovirt-engine[master]: core: Prevent dead lock on vm device (#852451)

emesika at redhat.com emesika at redhat.com
Thu Sep 20 08:08:37 UTC 2012


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 at redhat.com>
Signed-off-by: Eli Mesika <emesika at 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 at redhat.com>
Gerrit-Reviewer: Barak Azulay <bazulay at redhat.com>
Gerrit-Reviewer: Eli Mesika <emesika at redhat.com>
Gerrit-Reviewer: Michael Kublin <mkublin at redhat.com>
Gerrit-Reviewer: Roy Golan <rgolan at redhat.com>
Gerrit-Reviewer: Yair Zaslavsky <yzaslavs at redhat.com>
Gerrit-Reviewer: oVirt Jenkins CI Server



More information about the Engine-commits mailing list