Arik Hadas has uploaded a new change for review.

Change subject: core: tm
......................................................................

core: tm

Change-Id: Ibb01cc2a72b3358e23c727d646363c919a77bcfc
Signed-off-by: Arik Hadas <aha...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
1 file changed, 53 insertions(+), 62 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/37669/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 9d4fa81..859b3f9 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,6 +1,5 @@
 package org.ovirt.engine.core.bll;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -11,13 +10,16 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.AddDiskParameters;
 import org.ovirt.engine.core.common.action.LockProperties;
 import org.ovirt.engine.core.common.action.LockProperties.Scope;
 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.asynctasks.EntityInfo;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageType;
@@ -27,11 +29,11 @@
 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.CreateImageVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.HibernateVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
-import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.slf4j.Logger;
@@ -41,9 +43,6 @@
 @NonTransactiveCommandAttribute(forceCompensation = true)
 public class HibernateVmCommand<T extends VmOperationParameterBase> extends 
VmOperationCommandBase<T> {
     private static final Logger log = 
LoggerFactory.getLogger(HibernateVmCommand.class);
-
-    private static final String SAVE_IMAGE_TASK_KEY = "SAVE_IMAGE_TASK_KEY";
-    private static final String SAVE_RAM_STATE_TASK_KEY = 
"SAVE_RAM_STATE_TASK_KEY";
 
     private boolean isHibernateVdsProblematic;
     private Guid cachedStorageDomainId;
@@ -70,12 +69,6 @@
         return lockProperties.withScope(Scope.Command);
     }
 
-    @Override
-    protected void insertAsyncTaskPlaceHolders() {
-        persistAsyncTaskPlaceHolder(getParameters().getParentCommand(), 
SAVE_IMAGE_TASK_KEY);
-        persistAsyncTaskPlaceHolder(getParameters().getParentCommand(), 
SAVE_RAM_STATE_TASK_KEY);
-    }
-
     /**
      * Finds an active data/master storage domain which has enough space to 
store the hibernation volumes
      *
@@ -97,65 +90,63 @@
 
     @Override
     protected void perform() {
-        final Guid taskId1 = getAsyncTaskId(SAVE_IMAGE_TASK_KEY);
+        Guid dumpDiskId = createMemoryDumpDisk();
+        Guid metadataDiskId = createMemoryMetadataDisk();
 
-        Guid image1GroupId = Guid.newGuid();
-
-        Guid hiberVol1 = Guid.newGuid();
-        final VDSReturnValue ret1 =
-                runVdsCommand(
-                        VDSCommandType.CreateImage,
-                        new CreateImageVDSCommandParameters(
-                                getStoragePoolId(),
-                                getStorageDomainId(),
-                                image1GroupId,
-                                getVm().getTotalMemorySizeInBytes(),
-                                getMemoryVolumeType(),
-                                VolumeFormat.RAW,
-                                hiberVol1,
-                                ""));
-
-        if (!ret1.getSucceeded()) {
-            return;
-        }
-
-        Guid guid1 = createTask(taskId1, ret1.getCreationInfo(), 
VdcActionType.HibernateVm);
-        getReturnValue().getVdsmTaskIdList().add(guid1);
-
-        Guid taskId2 = getAsyncTaskId(SAVE_RAM_STATE_TASK_KEY);
-
-        // second vol should be 10kb
-        Guid image2GroupId = Guid.newGuid();
-
-        Guid hiberVol2 = Guid.newGuid();
-        VDSReturnValue ret2 =
-                runVdsCommand(
-                        VDSCommandType.CreateImage,
-                        new CreateImageVDSCommandParameters(getStoragePoolId(),
-                                getStorageDomainId(),
-                                image2GroupId,
-                                MemoryUtils.META_DATA_SIZE_IN_BYTES,
-                                VolumeType.Sparse,
-                                VolumeFormat.COW,
-                                hiberVol2,
-                                ""));
-
-        if (!ret2.getSucceeded()) {
-            return;
-        }
-        Guid guid2 = createTask(taskId2, ret2.getCreationInfo(), 
VdcActionType.HibernateVm);
-        getReturnValue().getVdsmTaskIdList().add(guid2);
+        DiskImage dumpDisk = getDisk(dumpDiskId);
+        DiskImage metadataDisk = getDisk(metadataDiskId);
 
         getSnapshotDAO().updateHibernationMemory(getVmId(),
                 MemoryUtils.createMemoryStateString(
                         getStorageDomainId(), getStoragePoolId(),
-                        image1GroupId, hiberVol1, image2GroupId, hiberVol2));
-
-        getParameters().setVdsmTaskIds(new 
ArrayList<Guid>(getReturnValue().getVdsmTaskIdList()));
+                        dumpDisk.getId(), dumpDisk.getImageId(), 
metadataDisk.getId(), metadataDisk.getImageId()));
 
         setSucceeded(true);
     }
 
+    private DiskImage getDisk(Guid diskId) {
+        return runInternalQuery(VdcQueryType.GetDiskByDiskId, new 
IdQueryParameters(diskId)).getReturnValue();
+    }
+
+    private Guid createMemoryMetadataDisk() {
+        DiskImage image = new DiskImage();
+        image.setDiskAlias(String.format("%s_Hibernation_metadata", 
getVm().getName()));
+        image.setDescription("Meta-data for hibernated VM");
+        image.setSize(MemoryUtils.META_DATA_SIZE_IN_BYTES);
+        image.setVolumeType(VolumeType.Sparse);
+        image.setvolumeFormat(VolumeFormat.COW);
+        image.setDiskInterface(DiskInterface.VirtIO);
+        return addDisk(image);
+    }
+
+    private Guid createMemoryDumpDisk() {
+        DiskImage image = new DiskImage();
+        image.setDiskAlias(String.format("%s_Hibernation_dump", 
getVm().getName()));
+        image.setDescription("Memory dump for hibernated VM");
+        image.setSize(getVm().getTotalMemorySizeInBytes());
+        image.setVolumeType(getMemoryVolumeType());
+        image.setvolumeFormat(VolumeFormat.RAW);
+        image.setDiskInterface(DiskInterface.VirtIO);
+        return addDisk(image);
+    }
+
+    private Guid addDisk(DiskImage disk) {
+        AddDiskParameters addDiskParameters = new 
AddDiskParameters(Guid.Empty, disk);
+        addDiskParameters.setStorageDomainId(getStorageDomainId());
+        addDiskParameters.setParentCommand(getActionType());
+        addDiskParameters.setParentParameters(getParameters());
+        VdcReturnValueBase vdcReturnValue =
+                runInternalActionWithTasksContext(VdcActionType.AddDisk, 
addDiskParameters);
+
+        if (vdcReturnValue.getSucceeded()) {
+            getTaskIdList().addAll(vdcReturnValue.getInternalVdsmTaskIdList());
+            return vdcReturnValue.getActionReturnValue();
+        } else {
+            throw new VdcBLLException(vdcReturnValue.getFault().getError(),
+                    String.format("Failed to create disk! %s", 
disk.getDiskAlias()));
+        }
+    }
+
     @Override
     protected AsyncTaskType getTaskType() {
         return AsyncTaskType.createVolume;


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb01cc2a72b3358e23c727d646363c919a77bcfc
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