Idan Shaby has uploaded a new change for review.

Change subject: core: Configurable Default for Wipe After Delete per Storage 
Domain
......................................................................

core: Configurable Default for Wipe After Delete per Storage Domain

This patch adds the ability to configure a default value for wipe after
delete (WAD) per storage domain via the REST API. This way, each new
disk will get the default value for WAD from its storage domain.
Note that SANWipeAfterDelete will no longer be the WAD default value for
disks, but for storage domains.

Change-Id: I4e0d5a1c9158be1284ffe05d1bf1397c9113f6c0
Bug-Url: https://bugzilla.redhat.com/1073448
Signed-off-by: Idan Shaby <ish...@redhat.com>
---
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/storage/AddStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageDomainCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainStaticDAODbFacadeImpl.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
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
M packaging/dbscripts/create_views.sql
M packaging/dbscripts/storages_sp.sql
A 
packaging/dbscripts/upgrade/03_06_0590_add_wipe_after_delete_to_storage_domain_static.sql
20 files changed, 103 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/35909/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 814fb9d..5d19acb 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
@@ -15,7 +15,6 @@
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
-import org.ovirt.engine.core.bll.utils.WipeAfterDeleteUtils;
 import org.ovirt.engine.core.bll.validator.DiskValidator;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -404,8 +403,7 @@
 
     private void createDiskBasedOnImage() {
         if(!getParameters().getDiskInfo().isWipeAfterDeleteSet()) {
-            StorageType storageType = getStorageDomain().getStorageType();
-            
getParameters().getDiskInfo().setWipeAfterDelete(WipeAfterDeleteUtils.getDefaultWipeAfterDeleteFlag(storageType));
+            
getParameters().getDiskInfo().setWipeAfterDelete(getStorageDomain().getWipeAfterDelete());
         }
         // create from blank template, create new vm snapshot id
         AddImageFromScratchParameters parameters =
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java
index 1260dfa..a34eeef 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java
@@ -10,6 +10,7 @@
 
 import org.ovirt.engine.core.bll.profiles.DiskProfileHelper;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.bll.utils.WipeAfterDeleteUtils;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.StorageDomainManagementParameter;
@@ -48,6 +49,11 @@
 
     protected void initializeStorageDomain() {
         getStorageDomain().setId(Guid.newGuid());
+        if(getStorageDomain().getStorageStaticData().getWipeAfterDelete() == 
null) {
+            getStorageDomain().getStorageStaticData().setWipeAfterDelete(
+                    WipeAfterDeleteUtils.getDefaultWipeAfterDeleteFlag(
+                            
getStorageDomain().getStorageStaticData().getStorageType()));
+        }
     }
 
     protected boolean addStorageDomainInIrs() {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageDomainCommand.java
index 839b5e4..aa93260 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageDomainCommand.java
@@ -45,6 +45,7 @@
         props.remove("storageName");
         props.remove("description");
         props.remove("comment");
+        props.remove("wipeAfterDelete");
         if (!props.isEmpty()) {
             log.warn("There was an attempt to update the following fields 
although they are not allowed to be updated: {}",
                     StringUtils.join(props, ","));
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
index ce9f090..0d42b29 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
@@ -315,6 +315,14 @@
         staticData.setLastTimeUsedAsMaster(lastTimeUsedAsMaster);
     }
 
+    public Boolean getWipeAfterDelete() {
+        return staticData.getWipeAfterDelete();
+    }
+
+    public void setWipeAfterDelete(Boolean wipeAfterDelete) {
+        staticData.setWipeAfterDelete(wipeAfterDelete);
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
index ecb3eb0..84ef390 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
@@ -47,6 +47,8 @@
 
     private transient long lastTimeUsedAsMaster;
 
+    private Boolean wipeAfterDelete;
+
     public StorageDomainStatic() {
         id = Guid.Empty;
         storageType = StorageDomainType.Master;
@@ -137,6 +139,14 @@
         this.lastTimeUsedAsMaster = lastTimeUsedAsMaster;
     }
 
+    public Boolean getWipeAfterDelete() {
+        return wipeAfterDelete;
+    }
+
+    public void setWipeAfterDelete(Boolean wipeAfterDelete) {
+        this.wipeAfterDelete = wipeAfterDelete;
+    }
+
     public String getDescription() {
         return description;
     }
@@ -181,6 +191,7 @@
         result = prime * result + ((storageType == null) ? 0 : 
storageType.hashCode());
         result = prime * result + ((description == null) ? 0 : 
description.hashCode());
         result = prime * result + ((sanState == null) ? 0 : 
sanState.hashCode());
+        result = prime * result + ((wipeAfterDelete == null) ? 0 : 
wipeAfterDelete.hashCode());
         return result;
     }
 
@@ -206,6 +217,7 @@
                 && storagePoolType == other.storagePoolType
                 && storageType == other.storageType
                 && sanState == other.sanState
+                && wipeAfterDelete == other.wipeAfterDelete
                 && ObjectUtils.objectsEqual(description, other.description));
     }
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java
index 914f4b3..76b64b3 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java
@@ -173,6 +173,7 @@
             entity.setAutoRecoverable(rs.getBoolean("recoverable"));
             
entity.setContainsUnregisteredEntities(rs.getBoolean("contains_unregistered_entities"));
             
entity.setLastTimeUsedAsMaster(rs.getLong("last_time_used_as_master"));
+            entity.setWipeAfterDelete(rs.getBoolean("wipe_after_delete"));
             return entity;
         }
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainStaticDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainStaticDAODbFacadeImpl.java
index 8b40202..c931d3a 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainStaticDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainStaticDAODbFacadeImpl.java
@@ -84,7 +84,8 @@
                 .addValue("storage_domain_type",
                         domain.getStorageDomainType())
                 .addValue("storage_domain_format_type", 
domain.getStorageFormat())
-                .addValue("last_time_used_as_master", 
domain.getLastTimeUsedAsMaster());
+                .addValue("last_time_used_as_master", 
domain.getLastTimeUsedAsMaster())
+                .addValue("wipe_after_delete", domain.getWipeAfterDelete());
     }
 
     @Override
@@ -111,6 +112,7 @@
             entity.setStorageFormat(StorageFormatType.forValue(rs
                     .getString("storage_domain_format_type")));
             
entity.setLastTimeUsedAsMaster(rs.getLong("last_time_used_as_master"));
+            entity.setWipeAfterDelete(rs.getBoolean("wipe_after_delete"));
             return entity;
         }
     }
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 3f261e7..b76b0da 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -558,7 +558,7 @@
 ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST=Cannot ${action} 
${type}. Storage format ${storageFormat} is not supported on the selected host 
version.
 ERROR_CANNOT_EXTEND_NON_DATA_DOMAIN=Cannot extend Storage Domain. Extend 
operation is supported only on Data Storage Domain.
 ERROR_CANNOT_EXTEND_CONNECTION_FAILED=Cannot extend Storage Domain. Storage 
device ${lun} is unreachable on ${hostName}.
-ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description and comment are updateable.
+ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description, comment and wipe after delete are 
updateable.")
 
ERROR_CANNOT_UPDATE_STORAGE_POOL_COMPATIBILITY_VERSION_BIGGER_THAN_CLUSTERS=Cannot
 update Data Center compatibility version to a value that is greater than its 
Cluster's version. The following clusters should be upgraded ${ClustersList}.
 ERROR_CANNOT_ADD_EXISTING_STORAGE_DOMAIN_CONNECTION_DATA_ILLEGAL=Cannot import 
Storage Domain. Internal Error: The connection data is illegal.
 ERROR_CANNOT_ADD_DEPRECATED_EXISTING_SAN_EXPORT_STORAGE_DOMAIN=Cannot import 
SAN Export Storage Domain as it is no longer supported.
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
index ef415f6..bcc35dd 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
@@ -34,6 +34,7 @@
         newStaticDomain = new StorageDomainStatic();
         newStaticDomain.setStorage("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePl");
         newStaticDomain.setStorageFormat(StorageFormatType.V1);
+        newStaticDomain.setWipeAfterDelete(true);
         newDynamicDomain = new StorageDomainDynamic();
         newDynamicDomain.setAvailableDiskSize(USED_DISK_SIZE);
     }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
index 31e372d..e146fe9 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
@@ -41,6 +41,7 @@
         newStaticDomain.setStorageName("NewStorageDomain");
         newStaticDomain.setStorage("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePl");
         newStaticDomain.setStorageFormat(StorageFormatType.V1);
+        newStaticDomain.setWipeAfterDelete(true);
     }
 
     /**
@@ -166,6 +167,7 @@
     @Test
     public void testUpdate() {
         existingDomain.setStorageName("UpdatedName");
+        existingDomain.setWipeAfterDelete(true);
         dao.update(existingDomain);
 
         StorageDomainStatic after = dao.get(existingDomain.getId());
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 907666c..7a394e5 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -4211,6 +4211,7 @@
         <column>_update_date</column>
         <column>last_time_used_as_master</column>
         <column>storage_description</column>
+        <column>wipe_after_delete</column>
         <row>
             <value>72e3a666-89e1-4005-a7ca-f7548004a9aa</value>
             <value>0cc146e8-e5ed-482c-8814-270bc48c2982</value>
@@ -4221,6 +4222,7 @@
             <value>2014-10-14 16:33:00</value>
             <value>5</value>
             <value>description0</value>
+            <value>true</value>
         </row>
         <row>
             <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value>
@@ -4232,6 +4234,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>5</value>
             <value>description1</value>
+            <value>true</value>
         </row>
         <row>
             <value>72e3a666-89e1-4005-a7ca-f7548004a9ac</value>
@@ -4243,6 +4246,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>15</value>
             <value>description2</value>
+            <value>true</value>
         </row>
         <row>
             <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value>
@@ -4254,6 +4258,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>0</value>
             <value>description3</value>
+            <value>true</value>
         </row>
         <row>
             <value>d9ede37f-e6c3-4bf9-a984-19174070aa31</value>
@@ -4265,6 +4270,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>5</value>
             <value>description4</value>
+            <value>true</value>
         </row>
         <row>
             <value>d9ede37f-e6c3-4bf9-a984-19174070aa41</value>
@@ -4276,6 +4282,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>5</value>
             <value>description4</value>
+            <value>true</value>
         </row>
         <row>
             <value>17e7489d-d490-4681-a322-073ca19bd33d</value>
@@ -4287,6 +4294,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>0</value>
             <value>description5</value>
+            <value>true</value>
         </row>
         <row>
             <value>d034f3b2-fb9c-414a-b1be-1e642cfe57ae</value>
@@ -4298,6 +4306,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>0</value>
             <value>description6</value>
+            <value>true</value>
         </row>
         <row>
             <value>d9ede37f-e6c3-4bf9-a984-19174070aa32</value>
@@ -4309,6 +4318,7 @@
             <value>2010-11-23 10:48:10</value>
             <value>7</value>
             <value>description7</value>
+            <value>true</value>
         </row>
         <row>
             <value>a7957057-b5de-47bb-b8e0-2f8dbd9e63d8</value>
@@ -4320,6 +4330,7 @@
             <value>2014-04-24 12:00:00</value>
             <value>7</value>
             <value>ISCSI domain, part of 'rhel6.Mixed' storage pool</value>
+            <value>true</value>
         </row>
         <row>
             <value>bee623f3-9174-4ffd-aa30-4fb0dc0aa2f5</value>
@@ -4331,6 +4342,7 @@
             <value>2014-04-24 12:00:00</value>
             <value>7</value>
             <value>POSIX domain, part of 'rhel6.Mixed' storage pool</value>
+            <value>true</value>
         </row>
     </table>
 
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 8bb6eb2..c617f62 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -2703,6 +2703,7 @@
           <xs:element name="used" type="xs:long" minOccurs="0"/>
           <xs:element name="committed" type="xs:long" minOccurs="0"/>
           <xs:element name="storage_format" type="xs:string" minOccurs="0"/>
+          <xs:element name="wipe_after_delete" type="xs:boolean" 
minOccurs="0"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index ae9cdf0..5ee348e 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -1541,7 +1541,7 @@
             logical_unit.port: 'xs:int', logical_unit.target: 'xs:string', 
logical_unit.username: 'xs:string', logical_unit.password: 'xs:string',
             logical_unit.serial: 'xs:string', logical_unit.vendor_id: 
'xs:string', logical_unit.product_id: 'xs:string',
             logical_unit.lun_mapping: 'xs:int', logical_unit.portal: 
'xs:string', logical_unit.paths: 'xs:int', logical_unit.id: 'xs:string'}}
-        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.override_luns: 
'xs:boolean'}
+        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.override_luns: 
'xs:boolean', storagedomain.wipe_after_delete: 'xs:boolean'}
         description: update the storage domain
     urlparams:
       async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
@@ -1561,23 +1561,23 @@
             logical_unit.port: 'xs:int', logical_unit.target: 'xs:string', 
logical_unit.username: 'xs:string', logical_unit.password: 'xs:string',
             logical_unit.serial: 'xs:string', logical_unit.vendor_id: 
'xs:string', logical_unit.product_id: 'xs:string',
             logical_unit.lun_mapping: 'xs:int', logical_unit.portal: 
'xs:string', logical_unit.paths: 'xs:int', logical_unit.id: 'xs:string'}}
-        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.override_luns: 
'xs:boolean', storagedomain.storage_format: 'xs:string'}
+        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.override_luns: 
'xs:boolean', storagedomain.storage_format: 'xs:string', 
storagedomain.wipe_after_delete: 'xs:boolean'}
         description: add a new storage domain to the system using a direct lun
       - mandatoryArguments: {storagedomain.host.id|name: 'xs:string',
           storagedomain.type: 'xs:string', storagedomain.storage.type: 
'xs:string',
           storagedomain.format: 'xs:boolean',storagedomain.storage.address: 
'xs:string',
           storagedomain.storage.path: 'xs:string'}
-        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage_format: 'xs:string'}
+        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage_format: 'xs:string', 
storagedomain.wipe_after_delete: 'xs:boolean'}
         description: add a new storage domain to the system using the storage 
on the given host and path
       - mandatoryArguments: {storagedomain.host.id|name: 'xs:string',
           storagedomain.type: 'xs:string', storagedomain.storage.type: 
'xs:string',
           storagedomain.format: 'xs:boolean', storagedomain.storage.path: 
'xs:string'}
-        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage_format: 'xs:string'}
+        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage_format: 'xs:string', 
storagedomain.wipe_after_delete: 'xs:boolean'}
         description: add a new storage domain to the system using the storage 
on the localhost at the given path
       - mandatoryArguments: {storagedomain.host.id|name: 'xs:string',
           storagedomain.type: 'xs:string', storagedomain.storage.type: 
'xs:string',
           storagedomain.format: 'xs:boolean', storagedomain.storage.path: 
'xs:string', storagedomain.storage.vfs_type: 'xs:string'}
-        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.address: 'xs:string', 
storagedomain.storage.mount_options: 'xs:string', storagedomain.storage_format: 
'xs:string'}
+        optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.address: 'xs:string', 
storagedomain.storage.mount_options: 'xs:string', storagedomain.storage_format: 
'xs:string', storagedomain.wipe_after_delete: 'xs:boolean'}
         description: add a new storage domain to the system using the gluster 
or posixfs storage
     urlparams:
       async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
index f535ae3..d2402eb 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
@@ -51,6 +51,9 @@
                 entity.setStorageFormat(StorageFormatMapper.map(storageFormat, 
null));
             }
         }
+        if (model.isSetWipeAfterDelete()) {
+            entity.setWipeAfterDelete(model.isWipeAfterDelete());
+        }
         return entity;
     }
 
@@ -153,6 +156,7 @@
                 model.setStorageFormat(storageFormat);
             }
         }
+        model.setWipeAfterDelete(entity.getWipeAfterDelete());
         return model;
     }
 
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 af5c684..663e51c 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
@@ -1546,7 +1546,7 @@
     @DefaultStringValue("Cannot extend Storage Domain. Storage device ${lun} 
is unreachable from ${hostName}.")
     String ERROR_CANNOT_EXTEND_CONNECTION_FAILED();
 
-    @DefaultStringValue("Cannot ${action} ${type}. Only Storage Domain name, 
description and comment are updateable.")
+    @DefaultStringValue("Cannot ${action} ${type}. Only Storage Domain name, 
description, comment and wipe after delete are updateable.")
     String ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS();
 
     @DefaultStringValue("Cannot update Data Center compatibility version to a 
value that is greater than its Cluster's version. The following clusters should 
be upgraded ${ClustersList}.")
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 ce29748..8fcde20 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
@@ -519,7 +519,7 @@
 ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST=Cannot ${action} 
${type}. Storage format ${storageFormat} is not supported on the selected host 
version.
 ERROR_CANNOT_EXTEND_NON_DATA_DOMAIN=Cannot extend Storage Domain. Extend 
operation is supported only on Data Storage Domain.
 ERROR_CANNOT_EXTEND_CONNECTION_FAILED=Cannot extend Storage Domain. Storage 
device ${lun} is unreachable from ${hostName}.
-ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description and comment are updateable.
+ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description, comment and wipe after delete are 
updateable.")
 
ERROR_CANNOT_UPDATE_STORAGE_POOL_COMPATIBILITY_VERSION_BIGGER_THAN_CLUSTERS=Cannot
 update Data Center compatibility version to a value that is greater than its 
Cluster's version. The following clusters should be upgraded ${ClustersList}.
 ERROR_CANNOT_ADD_EXISTING_STORAGE_DOMAIN_CONNECTION_DATA_ILLEGAL=Cannot import 
Storage Domain. Internal Error: The connection data is illegal.
 ERROR_CANNOT_ADD_DEPRECATED_EXISTING_SAN_EXPORT_STORAGE_DOMAIN=Cannot import 
SAN Export Storage Domain as it is no longer supported.
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 62e4909..ff87239 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
@@ -563,7 +563,7 @@
 ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST=Cannot ${action} 
${type}. Storage format ${storageFormat} is not supported on the selected host 
version.
 ERROR_CANNOT_EXTEND_NON_DATA_DOMAIN=Cannot extend Storage Domain. Extend 
operation is supported only on Data Storage Domain.
 ERROR_CANNOT_EXTEND_CONNECTION_FAILED=Cannot extend Storage Domain. Storage 
device ${lun} is unreachable from ${hostName}.
-ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description and comment are updateable.
+ERROR_CANNOT_CHANGE_STORAGE_DOMAIN_FIELDS=Cannot ${action} ${type}. Only 
Storage Domain name, description, comment and wipe after delete are 
updateable.")
 
ERROR_CANNOT_UPDATE_STORAGE_POOL_COMPATIBILITY_VERSION_BIGGER_THAN_CLUSTERS=Cannot
 update Data Center compatibility version to a value that is greater than its 
Cluster's version. The following clusters should be upgraded ${ClustersList}.
 ERROR_CANNOT_ADD_EXISTING_STORAGE_DOMAIN_CONNECTION_DATA_ILLEGAL=Cannot import 
Storage Domain. Internal Error: The connection data is illegal.
 ERROR_CANNOT_ADD_DEPRECATED_EXISTING_SAN_EXPORT_STORAGE_DOMAIN=Cannot import 
SAN Export Storage Domain as it is no longer supported.
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index e480fbf..76b5bf9 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -16,6 +16,7 @@
                        storage_domain_static.storage_type as storage_type,
                         storage_domain_static.storage_domain_format_type as 
storage_domain_format_type,
             storage_domain_static.last_time_used_as_master as 
last_time_used_as_master,
+      storage_domain_static.wipe_after_delete as wipe_after_delete,
                        storage_pool.name as storage_pool_name,
                        unregistered_entities.storage_domain_id IS NOT NULL AS 
contains_unregistered_entities
 FROM        storage_domain_static LEFT OUTER JOIN
@@ -307,6 +308,7 @@
                storage_domain_static.storage_domain_type as 
storage_domain_type,
                 storage_domain_static.storage_domain_format_type as 
storage_domain_format_type,
         storage_domain_static.last_time_used_as_master as 
last_time_used_as_master,
+    storage_domain_static.wipe_after_delete as wipe_after_delete,
         
fn_get_storage_domain_shared_status_by_domain_id(storage_domain_static.id,storage_pool_iso_map.status,storage_domain_static.storage_domain_type)
 as storage_domain_shared_status,
        storage_domain_static.recoverable as recoverable,
        unregistered_entities.storage_domain_id IS NOT NULL AS 
contains_unregistered_entities
@@ -327,6 +329,7 @@
                storage_domain_static.storage_comment as storage_comment, 
storage_domain_static.storage_type as storage_type, 
storage_domain_static.storage_domain_type as storage_domain_type,
                 storage_domain_static.storage_domain_format_type as 
storage_domain_format_type,
         storage_domain_static.last_time_used_as_master as 
last_time_used_as_master,
+    storage_domain_static.wipe_after_delete as wipe_after_delete,
                null as storage_pool_id, null as storage_pool_name,
                storage_domain_dynamic.available_disk_size as 
available_disk_size,
                storage_domain_dynamic.used_disk_size as used_disk_size,
@@ -351,6 +354,7 @@
                 storage_domain_static.storage_comment as storage_comment, 
storage_domain_static.storage_type as storage_type, 
storage_domain_static.storage_domain_type as storage_domain_type,
                 storage_domain_static.storage_domain_format_type as 
storage_domain_format_type,
                 storage_domain_static.last_time_used_as_master as 
last_time_used_as_master,
+                storage_domain_static.wipe_after_delete as wipe_after_delete,
                 CASE
                           WHEN status_table.is_multi_domain THEN NULL
                           WHEN status_table.status IS NULL THEN 2 -- in case 
domain is unattached
@@ -1083,6 +1087,7 @@
                storage_domain_static.storage_domain_type,
                 storage_domain_static.storage_domain_format_type,
         storage_domain_static.last_time_used_as_master as 
last_time_used_as_master,
+    storage_domain_static.wipe_after_delete as wipe_after_delete,
                
fn_get_storage_domain_shared_status_by_domain_id(storage_domain_static.id,storage_pool_iso_map.status,storage_domain_static.storage_domain_type)
 AS
                storage_domain_shared_status,
                vds_groups.vds_group_id,
diff --git a/packaging/dbscripts/storages_sp.sql 
b/packaging/dbscripts/storages_sp.sql
index d9b8524..87cab62 100644
--- a/packaging/dbscripts/storages_sp.sql
+++ b/packaging/dbscripts/storages_sp.sql
@@ -418,12 +418,13 @@
        v_storage_type INTEGER,
        v_storage_domain_type INTEGER,
     v_storage_domain_format_type VARCHAR(50),
-    v_last_time_used_as_master BIGINT)
+    v_last_time_used_as_master BIGINT,
+  v_wipe_after_delete boolean)
 RETURNS VOID
    AS $procedure$
    BEGIN
-INSERT INTO storage_domain_static(id, storage,storage_name, 
storage_description, storage_comment, storage_type, storage_domain_type, 
storage_domain_format_type, last_time_used_as_master)
-       VALUES(v_id, v_storage, v_storage_name, v_storage_description, 
v_storage_comment, v_storage_type, v_storage_domain_type, 
v_storage_domain_format_type, v_last_time_used_as_master);
+INSERT INTO storage_domain_static(id, storage,storage_name, 
storage_description, storage_comment, storage_type, storage_domain_type, 
storage_domain_format_type, last_time_used_as_master, wipe_after_delete)
+       VALUES(v_id, v_storage, v_storage_name, v_storage_description, 
v_storage_comment, v_storage_type, v_storage_domain_type, 
v_storage_domain_format_type, v_last_time_used_as_master, v_wipe_after_delete);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -449,7 +450,8 @@
        v_storage_type INTEGER,
        v_storage_domain_type INTEGER,
        v_storage_domain_format_type INTEGER,
-       v_last_time_used_as_master BIGINT)
+       v_last_time_used_as_master BIGINT,
+  v_wipe_after_delete boolean)
 RETURNS VOID
 
        --The [storage_domain_static] table doesn't have a timestamp column. 
Optimistic concurrency logic cannot be generated
@@ -460,6 +462,7 @@
       storage_domain_type = v_storage_domain_type, _update_date = 
LOCALTIMESTAMP,
       storage_domain_format_type = v_storage_domain_format_type,
       last_time_used_as_master = v_last_time_used_as_master,
+      wipe_after_delete = v_wipe_after_delete,
       storage_description = v_storage_description, storage_comment = 
v_storage_comment
       WHERE id = v_id;
 END; $procedure$
diff --git 
a/packaging/dbscripts/upgrade/03_06_0590_add_wipe_after_delete_to_storage_domain_static.sql
 
b/packaging/dbscripts/upgrade/03_06_0590_add_wipe_after_delete_to_storage_domain_static.sql
new file mode 100644
index 0000000..687b7dd
--- /dev/null
+++ 
b/packaging/dbscripts/upgrade/03_06_0590_add_wipe_after_delete_to_storage_domain_static.sql
@@ -0,0 +1,30 @@
+CREATE FUNCTION add_wipe_after_delete_to_storage_domain_static() RETURNS void 
AS $$
+  declare
+  v_table text;
+  v_column text;
+
+  begin
+    v_table = 'storage_domain_static';
+    v_column = 'wipe_after_delete';
+    if (not exists (SELECT  1
+                    FROM    information_schema.columns
+                    WHERE   table_name ilike v_table AND
+                            column_name ilike v_column)) then
+      -- The wipe_after_delete column does not exist.
+      PERFORM  fn_db_add_column(v_table, v_column, 'boolean NOT NULL DEFAULT 
false');
+
+      UPDATE  storage_domain_static
+      SET     wipe_after_delete = true
+      FROM    vdc_options
+      WHERE   vdc_options.option_name = 'SANWipeAfterDelete' AND
+              vdc_options.version = 'general' AND
+              vdc_options.option_value = 'true' AND
+              ( storage_domain_static.storage_type = 2 OR
+                storage_domain_static.storage_type = 3); -- 2 and 3 are the 
only storage types which are block domains.
+    end if;
+  end
+$$ LANGUAGE plpgsql;
+
+SELECT add_wipe_after_delete_to_storage_domain_static();
+
+DROP FUNCTION add_wipe_after_delete_to_storage_domain_static();


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4e0d5a1c9158be1284ffe05d1bf1397c9113f6c0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Idan Shaby <ish...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to