Maor Lipchuk has uploaded a new change for review.

Change subject: core: Lock VM when on hibernate process.
......................................................................

core: Lock VM when on hibernate process.

Race between live snapshot and VM hibernate,
cause results which might be undefined.
The proposed fix is adding hibernateVM lock on the VM to avoid this
behaviour.

Change-Id: I3d35780a00a66fc0cc8708af2bc4cb6d292446f0
Related-to: https://bugzilla.redhat.com/877978
Signed-off-by: Maor Lipchuk <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
1 file changed, 15 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/11232/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
index 8e6f846..2a8b6ab 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
@@ -1,7 +1,9 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -19,6 +21,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
+import org.ovirt.engine.core.common.locks.LockingGroup;
 import 
org.ovirt.engine.core.common.vdscommands.CreateImageVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.HibernateVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.UpdateVmDynamicDataVDSCommandParameters;
@@ -33,6 +36,7 @@
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
+@LockIdNameAttribute
 @DisableInPrepareMode
 @NonTransactiveCommandAttribute(forceCompensation = true)
 public class HibernateVmCommand<T extends HibernateVmParameters> extends 
VmOperationCommandBase<T> {
@@ -273,15 +277,21 @@
                 }
             }
         }
-
-        if (!retValue) {
-            addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM);
-            addCanDoActionMessage(VdcBllMessages.VAR__ACTION__HIBERNATE);
-        }
         return retValue;
     }
 
     @Override
+    protected void setActionMessageParameters() {
+        addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM);
+        addCanDoActionMessage(VdcBllMessages.VAR__ACTION__HIBERNATE);
+    }
+
+    @Override
+    protected Map<String, String> getExclusiveLocks() {
+        return Collections.singletonMap(getVmId().toString(), 
LockingGroup.VM.name());
+    }
+
+    @Override
     protected void endSuccessfully() {
         if (getVm() != null) {
             if (getVm().getStatus() != VMStatus.SavingState && 
getVm().getStatus() != VMStatus.Up) {


--
To view, visit http://gerrit.ovirt.org/11232
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3d35780a00a66fc0cc8708af2bc4cb6d292446f0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to