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