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

Reply via email to