Arik Hadas has uploaded a new change for review.

Change subject: core: [WIP] extract general code from HibernateVmCommand
......................................................................

core: [WIP] extract general code from HibernateVmCommand

This patch extract code which is not specific to hibernate command, and
which can be used by the create snapshot command when the snapshot
contains memory state, from HibernateVmCommand to shared places.

Change-Id: I15c4f3302d26eb5d161824f8bb19ecc5dd114a20
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/VmHandler.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
3 files changed, 39 insertions(+), 31 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/90/14290/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 9d04ff1..4c20a54 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,10 +1,8 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.HibernateVmParameters;
@@ -13,8 +11,6 @@
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
-import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
@@ -51,7 +47,7 @@
 
     public HibernateVmCommand(T parameters) {
         super(parameters);
-        super.setStoragePoolId(getVm().getStoragePoolId());
+        setStoragePoolId(getVm().getStoragePoolId());
         parameters.setEntityId(getVm().getId());
     }
 
@@ -68,18 +64,11 @@
     @Override
     public NGuid getStorageDomainId() {
         if (_storageDomainId.equals(Guid.Empty) && getVm() != null) {
-            List<StorageDomain> domainsInPool = 
getStorageDomainDAO().getAllForStoragePool(getVm().getStoragePoolId());
-            if (domainsInPool.size() > 0) {
-                for (StorageDomain currDomain : domainsInPool) {
-                    if 
((currDomain.getStorageDomainType().equals(StorageDomainType.Master)
-                            || 
currDomain.getStorageDomainType().equals(StorageDomainType.Data))
-                            && currDomain.getStatus() == 
StorageDomainStatus.Active
-                            && 
doesStorageDomainhaveSpaceForRequest(currDomain, (getImageSizeInBytes()
-                                    + getMetaDataSizeInBytes()) / 
BYTES_IN_GB)) {
-                        _storageDomainId = currDomain.getId();
-                        break;
-                    }
-                }
+            long sizeNeeded = (getVm().getImageSizeInBytes()
+                    + getMetaDataSizeInBytes()) / BYTES_IN_GB;
+            StorageDomain storageDomain = 
VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), sizeNeeded);
+            if (storageDomain != null) {
+                _storageDomainId = storageDomain.getId();
             }
         }
         return _storageDomainId;
@@ -126,7 +115,7 @@
                                             getVm().getStoragePoolId(),
                                             getStorageDomainId().getValue(),
                                             image1GroupId,
-                                            getImageSizeInBytes(),
+                                            getVm().getImageSizeInBytes(),
                                             getVolumeType(),
                                             VolumeFormat.RAW,
                                             hiberVol1,
@@ -256,10 +245,6 @@
         return true;
     }
 
-    protected boolean doesStorageDomainhaveSpaceForRequest(StorageDomain 
storageDomain, long sizeRequested) {
-        // not calling validate in order not to add the messages per domain
-        return (new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested)).isValid();
-    }
 
     @Override
     protected void setActionMessageParameters() {
@@ -378,15 +363,6 @@
     private VolumeType getVolumeType() {
         return (getStoragePool().getstorage_pool_type().isFileDomain()) ? 
VolumeType.Sparse
                 : VolumeType.Preallocated;
-    }
-
-    /**
-     * Returns the memory size should be allocated in the storage.
-     *
-     * @return - Memory size for allocation in bytes.
-     */
-    private long getImageSizeInBytes() {
-        return (long) (getVm().getVmMemSizeMb() + 200 + (64 * 
getVm().getNumOfMonitors())) * 1024 * 1024;
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
index f54bbf8..afb58fa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
@@ -10,12 +10,16 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CompensationContext;
 import org.ovirt.engine.core.bll.network.MacPoolManager;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.backendinterfaces.BaseHandler;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.EditableField;
 import org.ovirt.engine.core.common.businessentities.EditableOnVmStatusField;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -513,5 +517,24 @@
         return (cdList.size() > 1 || floppyList.size() > 1);
     }
 
+    public static StorageDomain findStorageDomainForMemory(Guid storagePoolId, 
long sizeRequested) {
+        List<StorageDomain> domainsInPool = 
DbFacade.getInstance().getStorageDomainDao().getAllForStoragePool(storagePoolId);
+        if (domainsInPool.size() > 0) {
+            for (StorageDomain currDomain : domainsInPool) {
+                if 
((currDomain.getStorageDomainType().equals(StorageDomainType.Master)
+                        || 
currDomain.getStorageDomainType().equals(StorageDomainType.Data))
+                        && currDomain.getStatus() == StorageDomainStatus.Active
+                        && doesStorageDomainhaveSpaceForRequest(currDomain, 
sizeRequested)) {
+                    return currDomain;
+                }
+            }
+        }
+        return null;
+    }
+
+    protected static boolean 
doesStorageDomainhaveSpaceForRequest(StorageDomain storageDomain, long 
sizeRequested) {
+        // not calling validate in order not to add the messages per domain
+        return (new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested)).isValid();
+    }
 }
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
index 877867c..0174e5d 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
@@ -1397,6 +1397,15 @@
         return "VM [" + getName() + "]";
     }
 
+    /**
+     * Returns the memory size should be allocated in the storage.
+     *
+     * @return - Memory size for allocation in bytes.
+     */
+    public long getImageSizeInBytes() {
+        return (long) (getVmMemSizeMb() + 200 + (64 * getNumOfMonitors())) * 
1024 * 1024;
+    }
+
     ///////////////////////////////////////////////
     /// Utility methods that check the VM state ///
     ///////////////////////////////////////////////


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

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