Maor Lipchuk has uploaded a new change for review. Change subject: core: Validate if Storage is attached before format. ......................................................................
core: Validate if Storage is attached before format. Add validation to check if the Storage Domain is attached to a Data Center before formatting it. Aslo adding a new CDA which indicates how the user should work around it. Change-Id: I327705b1bb333e9b27ea8e67057966a7b62d8efc Bug-Url: https://bugzilla.redhat.com/1179899 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 7 files changed, 42 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/37987/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommand.java index cae453c..0c57bd5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommand.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll.storage; import java.util.Collections; +import java.util.List; import java.util.Map; import org.ovirt.engine.core.bll.LockMessagesMatchUtil; @@ -23,6 +24,8 @@ import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.errors.VdcFault; import org.ovirt.engine.core.common.locks.LockingGroup; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.FormatStorageDomainVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; @@ -108,6 +111,10 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_EXIST); } + if (getParameters().getDoFormat() && isStorageDomainAttached(dom)) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN); + } + VDS vds = getVds(); boolean localFs = isLocalFs(dom); StorageDomainToPoolRelationValidator domainPoolValidator = createDomainToPoolValidator(dom); @@ -142,6 +149,14 @@ return true; } + protected boolean isStorageDomainAttached(StorageDomain dom) { + List<StorageDomain> storageDomainList = + (List<StorageDomain>) getBackend().runInternalQuery(VdcQueryType.GetStorageDomainsWithAttachedStoragePoolGuid, + new StorageDomainsAndStoragePoolIdQueryParameters(dom, getStoragePoolId(), getVds().getId(), false)) + .getReturnValue(); + return !storageDomainList.isEmpty(); + } + protected StorageDomainToPoolRelationValidator createDomainToPoolValidator(StorageDomain dom) { return new StorageDomainToPoolRelationValidator(dom.getStorageStaticData(), null); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommandTest.java index b679595..5277222 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainCommandTest.java @@ -92,6 +92,7 @@ StorageDomainToPoolRelationValidatorTesting domainToPoolValidator = spy(new StorageDomainToPoolRelationValidatorTesting(storageDomain, null)); doReturn(storagePoolIsoMapDAOMock).when(domainToPoolValidator).getStoragePoolIsoMapDao(); doReturn(domainToPoolValidator).when(command).createDomainToPoolValidator(storageDomain); + doReturn(Boolean.FALSE).when(command).isStorageDomainAttached(storageDomain); } @Test @@ -111,6 +112,25 @@ } @Test + public void testCanDoActionWithAttachedStorageDomain() { + storageDomain.setStorageType(StorageType.NFS); + storageDomain.setStorageDomainType(StorageDomainType.Data); + doReturn(Boolean.TRUE).when(command).isStorageDomainAttached(storageDomain); + CanDoActionTestUtils.runAndAssertCanDoActionFailure( + "canDoAction shouldn't be possible for an attached storage domain", + command, VdcBllMessages.ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN); + } + + @Test + public void testCanDoActionWithAttachedStorageDomainAndNoFormat() { + storageDomain.setStorageType(StorageType.NFS); + storageDomain.setStorageDomainType(StorageDomainType.Data); + doReturn(Boolean.TRUE).when(command).isStorageDomainAttached(storageDomain); + command.getParameters().setDoFormat(false); + CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); + } + + @Test public void testSetActionMessageParameters() { CanDoActionTestUtils.runAndAssertSetActionMessageParameters(command, VdcBllMessages.VAR__TYPE__STORAGE__DOMAIN, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index fe40f45..a45e293 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -248,6 +248,7 @@ ACTION_TYPE_FAILED_MISSED_STORAGES_FOR_SOME_DISKS(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_STORAGE_DOMAIN_IS_WRONG(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_STORAGE_DOMAIN_ALREADY_CONTAINS_DISK(ErrorType.CONFLICT), + ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN(ErrorType.CONFLICT), ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_SPECIFIED(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_STORAGE_DELETE_PROTECTED(ErrorType.CONFLICT), ACTION_TYPE_FAILED_STORAGE_VMS_IN_POOL(ErrorType.CONFLICT), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index d6980fe..cd4b596 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -500,6 +500,7 @@ STORAGE_POOL_REINITIALIZE_WITH_MORE_THAN_ONE_DATA_DOMAIN = Cannot ${action} ${type}.\n\ The ${action} action can be performed on a Data Center that has only one Storage Domain in Active/Unknown state. ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST= Data Center doesn't exist. +ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN=Cannot ${action} ${type}.\n The Storage Domain metadata indicates it is already attached to a Data Center hence cannot be formatted.\n To remove the Storage Domain one should either remove it without the format option or attach it to an existing Data Center, detach it, and try again. ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_IN_STORAGE_POOL=Cannot ${action} ${type}. The selected Storage Domain is not part of the Data Center. ACTION_TYPE_FAILED_LUNS_ALREADY_PART_OF_STORAGE_DOMAINS=Cannot ${action} ${type}. The following LUNs are already part of existing storage domains: ${lunIds}. ACTION_TYPE_FAILED_LUNS_ALREADY_USED_BY_DISKS=Cannot ${action} ${type}. The following LUNs are already used by DirectLUN disks: ${lunIds}. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index df810da..e55300b 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -1570,6 +1570,9 @@ @DefaultStringValue("Cannot ${action} ${type}. Storage format ${storageFormat} is not supported on the selected host version.") String ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST(); + @DefaultStringValue("Cannot ${action} ${type}.\n The Storage Domain metadata indicates it is already attached to a Data Center hence cannot be formatted.\n To remove the Storage Domain one should either remove it without the format option or attach it to an existing Data Center, detach it, and try again.") + String ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN(); + @DefaultStringValue("Cannot extend Storage Domain. Extend operation is supported only on Data Storage Domain.") String ERROR_CANNOT_EXTEND_NON_DATA_DOMAIN(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 3452a0a..4a13cf9 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -452,6 +452,7 @@ STORAGE_POOL_REINITIALIZE_WITH_MORE_THAN_ONE_DATA_DOMAIN = Cannot ${action} ${type}.\n\ The ${action} action can be performed on a Data Center that has only one Storage Domain in Active/Unknown state. ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST= Data Center doesn't exist. +ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN=Cannot ${action} ${type}.\n The Storage Domain metadata indicates it is already attached to a Data Center hence cannot be formatted.\n To remove the Storage Domain one should either remove it without the format option or attach it to an existing Data Center, detach it, and try again. ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_IN_STORAGE_POOL=Cannot ${action} ${type}. The selected Storage Domain is not part of the Data Center. ACTION_TYPE_FAILED_LUNS_ALREADY_PART_OF_STORAGE_DOMAINS=Cannot ${action} ${type}. The following LUNs are already part of existing storage domains: ${lunIds}. ACTION_TYPE_FAILED_LUNS_ALREADY_USED_BY_DISKS=Cannot ${action} ${type}. The following LUNs are already used by DirectLUN disks: ${lunIds}. diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index bc1b606..34b57ad 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -502,6 +502,7 @@ STORAGE_POOL_REINITIALIZE_WITH_MORE_THAN_ONE_DATA_DOMAIN = Cannot ${action} ${type}.\n\ The ${action} action can be performed on a Data Center that has only one Storage Domain in Active/Unknown state. ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST= Data Center doesn't exist. +ACTION_TYPE_FAILED_FORMAT_STORAGE_DOMAIN_WITH_ATTACHED_DATA_DOMAIN=Cannot ${action} ${type}.\n The Storage Domain metadata indicates it is already attached to a Data Center hence cannot be formatted.\n To remove the Storage Domain one should either remove it without the format option or attach it to an existing Data Center, detach it, and try again. ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_IN_STORAGE_POOL=Cannot ${action} ${type}. The selected Storage Domain is not part of the Data Center. ACTION_TYPE_FAILED_LUNS_ALREADY_PART_OF_STORAGE_DOMAINS=Cannot ${action} ${type}. The following LUNs are already part of existing storage domains: ${lunIds}. ACTION_TYPE_FAILED_LUNS_ALREADY_USED_BY_DISKS=Cannot ${action} ${type}. The following LUNs are already used by DirectLUN disks: ${lunIds}. -- To view, visit http://gerrit.ovirt.org/37987 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I327705b1bb333e9b27ea8e67057966a7b62d8efc 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