Arik Hadas has uploaded a new change for review.

Change subject: core: create images first
......................................................................

core: create images first

Change-Id: Ib7c97fb3907b155eb5d5d03b665ab80814da8229
Signed-off-by: Arik Hadas <aha...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
2 files changed, 49 insertions(+), 34 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/37671/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 19c8aab..9eb96e6 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
@@ -29,8 +29,6 @@
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.locks.LockingGroup;
-import org.ovirt.engine.core.common.queries.IdQueryParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.vdscommands.HibernateVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
@@ -90,22 +88,9 @@
 
     @Override
     protected void perform() {
-        Guid dumpDiskId = createMemoryDumpDisk();
-        Guid metadataDiskId = createMemoryMetadataDisk();
-
-        DiskImage dumpDisk = getDisk(dumpDiskId);
-        DiskImage metadataDisk = getDisk(metadataDiskId);
-
-        getSnapshotDAO().updateHibernationMemory(getVmId(),
-                MemoryUtils.createMemoryStateString(
-                        getStorageDomainId(), getStoragePoolId(),
-                        dumpDisk.getId(), dumpDisk.getImageId(), 
metadataDisk.getId(), metadataDisk.getImageId()));
-
+        createMemoryDumpDisk();
+        createMemoryMetadataDisk();
         setSucceeded(true);
-    }
-
-    private DiskImage getDisk(Guid diskId) {
-        return runInternalQuery(VdcQueryType.GetDiskByDiskId, new 
IdQueryParameters(diskId)).getReturnValue();
     }
 
     private Guid createMemoryMetadataDisk() {
@@ -241,25 +226,51 @@
             log.warn(
                     "VM '{}' doesn't have 'run_on_vds' value - cannot 
Hibernate.",
                     getVm().getName());
-            getReturnValue().setEndActionTryAgain(false);
+            endWithFailure();
+            return;
         }
 
-        else {
-            String hiberVol = getActiveSnapshot().getMemoryVolume();
-            if (hiberVol != null) {
-                try {
-                    runVdsCommand(VDSCommandType.Hibernate,
-                            new 
HibernateVDSCommandParameters(getVm().getRunOnVds(), getVmId(), hiberVol));
-                } catch (VdcBLLException e) {
-                    isHibernateVdsProblematic = true;
-                    throw e;
-                }
-                setSucceeded(true);
-            } else {
-                log.error("Hibernation volume of VM '{}', is not 
initialized.", getVm().getName());
-                endWithFailure();
+        List<VdcReturnValueBase> returnValues = endActionOnDisks();
+
+        DiskImage dumpDisk = getMemoryDumpDisk(returnValues);
+        DiskImage metadataDisk = getMemoryMetadataDisk(returnValues);
+
+        String hiberVol = MemoryUtils.createMemoryStateString(
+                getStorageDomainId(), getStoragePoolId(),
+                dumpDisk.getId(), dumpDisk.getImageId(), metadataDisk.getId(), 
metadataDisk.getImageId());
+
+        try {
+            runVdsCommand(VDSCommandType.Hibernate,
+                    new HibernateVDSCommandParameters(getVm().getRunOnVds(), 
getVmId(), hiberVol));
+            getSnapshotDAO().updateHibernationMemory(getVmId(), hiberVol);
+        } catch (VdcBLLException e) {
+            isHibernateVdsProblematic = true;
+            throw e;
+        }
+
+        setSucceeded(true);
+    }
+
+    private DiskImage getMemoryDumpDisk(List<VdcReturnValueBase> returnValues) 
{
+        for (VdcReturnValueBase returnValue : returnValues) {
+            DiskImage disk = returnValue.getActionReturnValue();
+            if (disk.getSize() != MemoryUtils.META_DATA_SIZE_IN_BYTES) {
+                return disk;
             }
         }
+
+        return null;
+    }
+
+    private DiskImage getMemoryMetadataDisk(List<VdcReturnValueBase> 
returnValues) {
+        for (VdcReturnValueBase returnValue : returnValues) {
+            DiskImage disk = returnValue.getActionReturnValue();
+            if (disk.getSize() == MemoryUtils.META_DATA_SIZE_IN_BYTES) {
+                return disk;
+            }
+        }
+
+        return null;
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
index cddd22c..da7338c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
 import org.ovirt.engine.core.common.businessentities.Disk;
@@ -271,17 +272,20 @@
         setSucceeded(true);
     }
 
-    protected void endActionOnDisks() {
+    protected List<VdcReturnValueBase> endActionOnDisks() {
+        List<VdcReturnValueBase> returnValues = new ArrayList<>();
         for (VdcActionParametersBase p : getParametersForChildCommand()) {
             if (overrideChildCommandSuccess()) {
                 p.setTaskGroupSuccess(getParameters().getTaskGroupSuccess());
             }
 
-            getBackend().endAction(
+            VdcReturnValueBase returnValue = getBackend().endAction(
                     p.getCommandType() == VdcActionType.Unknown ? 
getChildActionType() : p.getCommandType(),
                     p,
                     
getContext().clone().withoutCompensationContext().withoutExecutionContext().withoutLock());
+            returnValues.add(returnValue);
         }
+        return returnValues;
     }
 
     protected List<VdcActionParametersBase> getParametersForChildCommand() {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib7c97fb3907b155eb5d5d03b665ab80814da8229
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <aha...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to