Arik Hadas has uploaded a new change for review.

Change subject: core: lock the vds manager while calling hibernate verb
......................................................................

core: lock the vds manager while calling hibernate verb

It is needed to lock the vds manager so that no statuses will be updated
while calling the hibernate verb in vdsm and setting the status of the
VM to SavingState afterwards.

The previous HibernateVDSCommand is changed to
HibernateBrokerVDSCommand, and a new HibernateVDSCommand that calls it
after the vds manager is locked, is added.

Change-Id: I2537fffccd15cb5fa30f99793c803373886c633f
Bug-Url: https://bugzilla.redhat.com/949281
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/HibernateVDSCommand.java
R 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateBrokerVDSCommand.java
3 files changed, 62 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/14520/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index 455a725..c37d6f7 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -9,7 +9,7 @@
     CreateVm("org.ovirt.engine.core.vdsbroker"),
     DestroyVm("org.ovirt.engine.core.vdsbroker"),
     Pause("org.ovirt.engine.core.vdsbroker.vdsbroker"),
-    Hibernate("org.ovirt.engine.core.vdsbroker.vdsbroker"),
+    Hibernate("org.ovirt.engine.core.vdsbroker"),
     Resume("org.ovirt.engine.core.vdsbroker"),
     Migrate("org.ovirt.engine.core.vdsbroker"),
     MigrateStatus("org.ovirt.engine.core.vdsbroker.vdsbroker"),
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/HibernateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/HibernateVDSCommand.java
new file mode 100644
index 0000000..3c5b087
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/HibernateVDSCommand.java
@@ -0,0 +1,59 @@
+package org.ovirt.engine.core.vdsbroker;
+
+import org.ovirt.engine.core.common.businessentities.VMStatus;
+import org.ovirt.engine.core.common.businessentities.VmDynamic;
+import org.ovirt.engine.core.common.vdscommands.HibernateVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.HibernateBrokerVDSCommand;
+
+public class HibernateVDSCommand<P extends HibernateVDSCommandParameters> 
extends VdsIdVDSCommandBase<P> {
+
+    public HibernateVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void ExecuteVdsIdCommand() {
+        if (_vdsManager == null) {
+            getVDSReturnValue().setSucceeded(false);
+            return;
+        }
+
+        VDSReturnValue retVal = runHibernateBrokerVDSCommand();
+        if (retVal.getSucceeded()) {
+            changeVmStatusToSavingState();
+            getVDSReturnValue().setSucceeded(true);
+        }
+        else {
+            log.errorFormat("VDS::hibernate Failed hibernate vm '{0}' in vds = 
{1} : {2}, error = {3}",
+                    getParameters().getVmId(), getVds().getId(), 
getVds().getName(), retVal.getExceptionString());
+            getVDSReturnValue().setSucceeded(false);
+            
getVDSReturnValue().setExceptionString(retVal.getExceptionString());
+            
getVDSReturnValue().setExceptionObject(retVal.getExceptionObject());
+            getVDSReturnValue().setVdsError(retVal.getVdsError());
+        }
+    }
+
+    private VDSReturnValue runHibernateBrokerVDSCommand() {
+        HibernateBrokerVDSCommand<HibernateVDSCommandParameters> command =
+                new 
HibernateBrokerVDSCommand<HibernateVDSCommandParameters>(getParameters());
+        command.execute();
+        return command.getVDSReturnValue();
+    }
+
+    private void changeVmStatusToSavingState() {
+        TransactionSupport.executeInNewTransaction(
+                new TransactionMethod<Object>() {
+                    @Override
+                    public Object runInTransaction() {
+                        VmDynamic vmDynamic = 
DbFacade.getInstance().getVmDynamicDao().get(getParameters().getVmId());
+                        vmDynamic.setStatus(VMStatus.SavingState);
+                        _vdsManager.UpdateVmDynamic(vmDynamic);
+                        return null;
+                    }
+                });
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateBrokerVDSCommand.java
similarity index 69%
rename from 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateVDSCommand.java
rename to 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateBrokerVDSCommand.java
index 37d6789..8eb1d03 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HibernateBrokerVDSCommand.java
@@ -2,8 +2,8 @@
 
 import org.ovirt.engine.core.common.vdscommands.*;
 
-public class HibernateVDSCommand<P extends HibernateVDSCommandParameters> 
extends VdsBrokerCommand<P> {
-    public HibernateVDSCommand(P parameters) {
+public class HibernateBrokerVDSCommand<P extends 
HibernateVDSCommandParameters> extends VdsBrokerCommand<P> {
+    public HibernateBrokerVDSCommand(P parameters) {
         super(parameters);
     }
 


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

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

Reply via email to