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
