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
