Maor Lipchuk has uploaded a new change for review. Change subject: core: Introduce restore all cinder snapshots command. ......................................................................
core: Introduce restore all cinder snapshots command. Introduce restore for all cinder snapshts command. Change-Id: I3189bd1c586957800eb5784877cd605ae9f847fc Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RestoreAllCinderSnapshotsCommand.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RestoreAllCinderSnapshotsParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java 3 files changed, 167 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/38/42338/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RestoreAllCinderSnapshotsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RestoreAllCinderSnapshotsCommand.java new file mode 100644 index 0000000..618b02f --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RestoreAllCinderSnapshotsCommand.java @@ -0,0 +1,91 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +import org.ovirt.engine.core.bll.InternalCommandAttribute; +import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.bll.RemoveAllVmCinderDisksCommandCallBack; +import org.ovirt.engine.core.bll.VmCommand; +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; +import org.ovirt.engine.core.common.action.RestoreAllCinderSnapshotsParameters; +import org.ovirt.engine.core.common.action.RestoreFromSnapshotParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.businessentities.SubjectEntity; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; + +@InternalCommandAttribute +@NonTransactiveCommandAttribute +public class RestoreAllCinderSnapshotsCommand<T extends RestoreAllCinderSnapshotsParameters> extends VmCommand<T> { + + public RestoreAllCinderSnapshotsCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + } + + @Override + protected void executeVmCommand() { + for (CinderDisk cinderDisk : getParameters().getCinderDisks()) { + ImagesContainterParametersBase params = + new RestoreFromSnapshotParameters(cinderDisk.getImageId(), + getParameters().getVmId(), + getParameters().getSnapshot(), + getParameters().getRemovedSnapshotId()); + params.setParentCommand(getActionType()); + params.setParentParameters(getParameters()); + VdcReturnValueBase vdcReturnValue = removeCinderDisk(cinderDisk, params); + } + setSucceeded(true); + } + + private void logRemoveCinderDiskError(CinderDisk cinderDisk, VdcReturnValueBase vdcReturnValue) { + log.error("Can't remove cinder disk id '{}' for VM id '{}' from domain id '{}' due to: {}.", + cinderDisk.getImageId(), + getParameters().getVmId(), + cinderDisk.getStorageIds().get(0), + vdcReturnValue != null ? vdcReturnValue.getFault().getMessage() : ""); + } + + private VdcReturnValueBase removeCinderDisk(CinderDisk cinderDisk, ImagesContainterParametersBase params) { + Future<VdcReturnValueBase> future = CommandCoordinatorUtil.executeAsyncCommand( + VdcActionType.RestoreFromCinderSnapshot, + params, + cloneContextAndDetachFromParent(), + new SubjectEntity(VdcObjectType.Storage, cinderDisk.getStorageIds().get(0))); + try { + return future.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + return null; + } + + @Override + protected void endSuccessfully() { + if (!getParameters().isParentHasTasks()) { + getBackend().endAction(getParameters().getParentCommand(), + getParameters().getParentParameters(), + getContext().clone().withoutCompensationContext().withoutExecutionContext().withoutLock()); + } + } + + @Override + protected void endWithFailure() { + if (!getParameters().isParentHasTasks()) { + getParameters().getParentParameters().setTaskGroupSuccess(false); + getBackend().endAction(getParameters().getParentCommand(), + getParameters().getParentParameters(), + cloneContextAndDetachFromParent()); + } + setSucceeded(true); + } + + @Override + public CommandCallback getCallback() { + return new RemoveAllVmCinderDisksCommandCallBack<>(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RestoreAllCinderSnapshotsParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RestoreAllCinderSnapshotsParameters.java new file mode 100644 index 0000000..fc77236 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RestoreAllCinderSnapshotsParameters.java @@ -0,0 +1,75 @@ +package org.ovirt.engine.core.common.action; + +import java.io.Serializable; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.Snapshot; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.compat.Guid; + +public class RestoreAllCinderSnapshotsParameters extends VmOperationParameterBase implements Serializable { + + private boolean parentHasTasks; + private Guid imageId; + private Snapshot snapshot; + private Guid removedSnapshotId; + private boolean privateForceDelete; + private List<CinderDisk> cinderDisks; + + public RestoreAllCinderSnapshotsParameters() { + } + + public RestoreAllCinderSnapshotsParameters(Guid vmId, List<CinderDisk> cinderDisks) { + super(vmId); + this.cinderDisks = cinderDisks; + setForceDelete(false); + } + + public List<CinderDisk> getCinderDisks() { + return cinderDisks; + } + + public void setCinderDisks(List<CinderDisk> cinderDisks) { + this.cinderDisks = cinderDisks; + } + + public boolean getForceDelete() { + return privateForceDelete; + } + + public void setForceDelete(boolean value) { + privateForceDelete = value; + } + + public boolean isParentHasTasks() { + return parentHasTasks; + } + + public void setParentHasTasks(boolean parentHasTasks) { + this.parentHasTasks = parentHasTasks; + } + + public Guid getImageId() { + return imageId; + } + + public void setImageId(Guid imageId) { + this.imageId = imageId; + } + + public Snapshot getSnapshot() { + return snapshot; + } + + public void setSnapshot(Snapshot snapshot) { + this.snapshot = snapshot; + } + + public Guid getRemovedSnapshotId() { + return removedSnapshotId; + } + + public void setRemovedSnapshotId(Guid removedSnapshotId) { + this.removedSnapshotId = removedSnapshotId; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index 46bd17f..aef5616 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -465,6 +465,7 @@ TryBackToCinderSnapshot(3212, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.STORAGE), TryBackToAllCinderSnapshots(3213, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.STORAGE), RestoreFromCinderSnapshot(3214, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.STORAGE), + RestoreAllCinderSnapshots(3215, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.STORAGE), // Host Devices RefreshHostDevices(4000, ActionGroup.MANIPULATE_HOST, false, QuotaDependency.NONE), -- To view, visit https://gerrit.ovirt.org/42338 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3189bd1c586957800eb5784877cd605ae9f847fc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches