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