Liron Ar has uploaded a new change for review.

Change subject: core: AddDiskCommand - add option to leave disk as illegal on 
failure
......................................................................

core: AddDiskCommand - add option to leave disk as illegal on failure

When adding a disk in case of failure the added disk is currently being
removed automatically by the engine which is wrong in atleast some of
the cases as we might have garbage on the storage.
As first step, this change allows to restrict the command to leave the
disk in illegal status in case of failure and not delete the disk.

Change-Id: I8ccf85a2ab38e96dc934be36acb5ac70a41f5e47
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddImageFromScratchParameters.java
M packaging/dbscripts/storages_sp.sql
5 files changed, 45 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/23462/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 980837d..5f49162 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -372,11 +372,11 @@
                         getDiskImageInfo());
         parameters.setQuotaId(getQuotaId());
         parameters.setDiskAlias(getDiskAlias());
+        
parameters.setShouldRemainIllegalOnFailedExecution(getParameters().isShouldRemainIllegalOnFailedExecution());
         parameters.setStorageDomainId(getStorageDomainId());
         parameters.setParentCommand(VdcActionType.AddDisk);
         parameters.setEntityInfo(getParameters().getEntityInfo());
         parameters.setStoragePoolId(getStorageDomain().getStoragePoolId());
-        parameters.setParentParameters(getParameters());
         if (getVm() != null) {
             setVmSnapshotIdForDisk(parameters);
             
getCompensationContext().snapshotNewEntity(VmDeviceUtils.addManagedDevice(new 
VmDeviceId(getParameters().getDiskInfo()
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java
index 15b1564..081e276 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java
@@ -23,6 +23,7 @@
     public AddImageFromScratchCommand(T parameters) {
         super(parameters);
         setVmId(getParameters().getMasterVmId());
+        getParameters().setCommandType(getActionType());
     }
 
     protected AddImageFromScratchCommand(Guid commandId) {
@@ -65,11 +66,19 @@
         TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
             @Override
             public Void runInTransaction() {
-                addDiskImageToDb(mNewCreatedDiskImage, 
getCompensationContext());
+                if (!getParameters().isShouldRemainIllegalOnFailedExecution()) 
{
+                    addDiskImageToDb(mNewCreatedDiskImage, 
getCompensationContext());
+                } else {
+                    addDiskImageToDb(mNewCreatedDiskImage, null);
+                    
getCompensationContext().snapshotEntityStatus(mNewCreatedDiskImage.getImage(), 
ImageStatus.ILLEGAL);
+                }
                 return null;
             }
         });
         freeLock();
+        if (getParameters().isShouldRemainIllegalOnFailedExecution()) {
+            getReturnValue().setActionReturnValue(mNewCreatedDiskImage);
+        }
         processImageInIrs();
         getReturnValue().setActionReturnValue(mNewCreatedDiskImage);
         setSucceeded(true);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
index 8e4132a..9ca5f1c 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
@@ -7,6 +7,7 @@
     private static final long serialVersionUID = -7832310521101821905L;
     private Guid vmSnapshotId;
     private Guid storageDomainId;
+    private boolean shouldRemainIllegalOnFailedExecution;
 
     public AddDiskParameters() {
         storageDomainId = Guid.Empty;
@@ -32,4 +33,12 @@
     public void setVmSnapshotId(Guid value) {
         vmSnapshotId = value;
     }
+
+    public boolean isShouldRemainIllegalOnFailedExecution() {
+        return shouldRemainIllegalOnFailedExecution;
+    }
+
+    public void setShouldRemainIllegalOnFailedExecution(boolean 
shouldRemainIllegalOnFailedExecution) {
+        this.shouldRemainIllegalOnFailedExecution = 
shouldRemainIllegalOnFailedExecution;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddImageFromScratchParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddImageFromScratchParameters.java
index bce5d27..40354ed 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddImageFromScratchParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddImageFromScratchParameters.java
@@ -8,6 +8,7 @@
     private static final long serialVersionUID = 8249273209551108387L;
     private Guid masterVmId;
     private DiskImageBase diskInfo;
+    private boolean shouldRemainIllegalOnFailedExecution;
 
     public AddImageFromScratchParameters() {
         masterVmId = Guid.Empty;
@@ -34,4 +35,12 @@
     public void setDiskInfo(DiskImageBase diskInfo) {
         this.diskInfo = diskInfo;
     }
+
+    public boolean isShouldRemainIllegalOnFailedExecution() {
+        return shouldRemainIllegalOnFailedExecution;
+    }
+
+    public void setShouldRemainIllegalOnFailedExecution(boolean 
shouldRemainIllegalOnFailedExecution) {
+        this.shouldRemainIllegalOnFailedExecution = 
shouldRemainIllegalOnFailedExecution;
+    }
 }
diff --git a/packaging/dbscripts/storages_sp.sql 
b/packaging/dbscripts/storages_sp.sql
index 96b69d8..2992dea 100644
--- a/packaging/dbscripts/storages_sp.sql
+++ b/packaging/dbscripts/storages_sp.sql
@@ -226,6 +226,22 @@
 
 
 
+Create or replace FUNCTION 
GetVmAndTemplatesIdsByStorageDomainId(v_storage_domain_id UUID) RETURNS SETOF 
UUID STABLE
+   AS $procedure$
+BEGIN
+      RETURN QUERY SELECT DISTINCT vmst.vm_guid
+      FROM vm_static vmst
+      INNER JOIN vm_device vd ON vd.vm_id = vmst.vm_guid
+      INNER JOIN images i ON i.image_group_id = vd.device_id AND i.active = 
TRUE
+      inner join image_storage_domain_map on i.image_guid = 
image_storage_domain_map.image_id
+      WHERE image_storage_domain_map.storage_domain_id = v_storage_domain_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+
+
 Create or replace FUNCTION Getstorage_poolsByVdsId(v_vdsId UUID)
 RETURNS SETOF storage_pool STABLE
    AS $procedure$


-- 
To view, visit http://gerrit.ovirt.org/23462
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8ccf85a2ab38e96dc934be36acb5ac70a41f5e47
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Ar <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to