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

Reply via email to