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