Leonardo Bianconi has uploaded a new change for review. Change subject: core, engine: Prevent snapshot in ppc64 ......................................................................
core, engine: Prevent snapshot in ppc64 This change disables memory snapshot in the back end for clusters with architecture that doesn't support it. All logic was added in conjunction with the snapshot validation from the class FeatureSupported. Change-Id: I4f201b63ddf441a9bc76a37fda33f54fa766d937 Signed-off-by: Leonardo Bianconi <leonardo.bianc...@eldorado.org.br> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/architecture/IsSnapshotSupported.java 5 files changed, 65 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/21657/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index 5011bcd..6da505b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -150,7 +150,8 @@ } private MemoryImageBuilder createMemoryImageBuilder() { - if (!FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion())) { + boolean archSupportSnapshot = isSnapshotSupportedByArchitecture(getVm().getClusterArch(), getVm().getVdsGroupCompatibilityVersion()); + if (!FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()) || archSupportSnapshot) { return new NullableMemoryImageBuilder(); } @@ -248,6 +249,12 @@ } } + boolean archSupportSnapshot = isSnapshotSupportedByArchitecture(getVm().getClusterArch(), getVm().getVdsGroupCompatibilityVersion()); + if (getParameters().isSaveMemory() + && (archSupportSnapshot || !FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()))) { + log.warnFormat("A memory snapshot was required but not created, since VM architecture does not support it.", getVmId()); + } + incrementVmGeneration(); endActionOnDisks(); @@ -326,7 +333,8 @@ private SnapshotVDSCommandParameters buildLiveSnapshotParameters(Snapshot snapshot) { List<Disk> pluggedDisks = getDiskDao().getAllForVm(getVm().getId(), true); List<DiskImage> filteredPluggedDisks = ImagesHandler.filterImageDisks(pluggedDisks, false, true, true); - if (FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion())) { + boolean archSupportSnapshot = isSnapshotSupportedByArchitecture(getVm().getClusterArch(), getVm().getVdsGroupCompatibilityVersion()); + if (FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()) && archSupportSnapshot) { return new SnapshotVDSCommandParameters(getVm().getRunOnVds(), getVm().getId(), filteredPluggedDisks, @@ -384,7 +392,6 @@ @Override protected boolean canDoAction() { - if (getVm() == null) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 2aeff5f..ca2161b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -143,7 +143,8 @@ VmHandler.updateDisksForVm(getVm(), getDiskDao().getAllForVm(getVm().getId())); if (getVm().getStatus() != VMStatus.Suspended) { - memorySnapshotSupported = FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()); + boolean archSupportSnapshot = isSnapshotSupportedByArchitecture(getVm().getClusterArch(), getVm().getVdsGroupCompatibilityVersion()); + memorySnapshotSupported = FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()) && archSupportSnapshot; // If the VM is not hibernated, save the hibernation volume from the baseline snapshot memoryVolumeFromSnapshot = getActiveSnapshot().getMemoryVolume(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java index 485d486..311b9c6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java @@ -124,8 +124,9 @@ .getInstance() .getDiskImageDao() .getAllSnapshotsForVmSnapshot(snapshotToBePreviewed.getId()); + boolean archSupportSnapshot = isSnapshotSupportedByArchitecture(getVm().getClusterArch(), getVm().getVdsGroupCompatibilityVersion()); final boolean restoreMemory = getParameters().isRestoreMemory() && - FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()); + FeatureSupported.memorySnapshot(getVm().getVdsGroupCompatibilityVersion()) && archSupportSnapshot; TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @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 a5dca79..ca92735 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 @@ -4,6 +4,7 @@ import java.util.List; import java.util.Set; +import org.ovirt.engine.core.bll.architecture.IsSnapshotSupported; import org.ovirt.engine.core.bll.network.MacPoolManager; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; import org.ovirt.engine.core.bll.utils.PermissionSubject; @@ -11,7 +12,9 @@ import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmOperationParameterBase; +import org.ovirt.engine.core.common.archstrategy.ArchStrategyFactory; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.TagsVmMap; @@ -32,6 +35,7 @@ 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.compat.Version; import org.ovirt.engine.core.dao.DiskDao; import org.ovirt.engine.core.dao.DiskImageDAO; import org.ovirt.engine.core.dao.ImageDao; @@ -158,6 +162,19 @@ return result; } + /** + * Check if architecture supports snapshot + * @return + */ + public boolean isSnapshotSupportedByArchitecture (ArchitectureType architecture, Version compatibilityVersion) { + boolean supported = false; + if (architecture != ArchitectureType.undefined) { + supported = ArchStrategyFactory.getStrategy(architecture).run(new IsSnapshotSupported(compatibilityVersion)).returnValue(); + } + + return supported; + } + protected void removeVmStatic() { getVmStaticDAO().remove(getVmId()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/architecture/IsSnapshotSupported.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/architecture/IsSnapshotSupported.java new file mode 100644 index 0000000..a43148a --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/architecture/IsSnapshotSupported.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.bll.architecture; + +import org.ovirt.engine.core.common.archstrategy.ArchCommand; +import org.ovirt.engine.core.compat.Version; + +public class IsSnapshotSupported implements ArchCommand { + + // This is reserved for future use, currently there is not a + // class that handles architecture specific capabilities, so + // this class will check if the cluster version supports + // snapshot + @SuppressWarnings("unused") + private Version version; + + public IsSnapshotSupported(Version version) { + this.version = version; + } + + private boolean value; + + @Override + public void runForX86_64() { + value = true; + } + + @Override + public void runForPPC64() { + value = false; + } + + public boolean returnValue() { + return this.value; + } +} -- To view, visit http://gerrit.ovirt.org/21657 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4f201b63ddf441a9bc76a37fda33f54fa766d937 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Leonardo Bianconi <leonardo.bianc...@eldorado.org.br> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches