Gilad Chaplik has uploaded a new change for review. Change subject: core, db: disk profile: handle attach/detach ......................................................................
core, db: disk profile: handle attach/detach Attach: create disk profile for new storage domain in pool (attach/create) Detach: remove qos id from disk profiles of detached storage domain Change-Id: I29aaf7b0b537f0b80b91b09e025e9487bbb69c2d Signed-off-by: Gilad Chaplik <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/DiskProfileHelper.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/DetachStorageDomainFromPoolCommand.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java M packaging/dbscripts/disk_profiles_sp.sql 7 files changed, 77 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/13/31813/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/DiskProfileHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/DiskProfileHelper.java new file mode 100644 index 0000000..d140057 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/DiskProfileHelper.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.bll.profiles; + +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; +import org.ovirt.engine.core.compat.Guid; + +public class DiskProfileHelper { + + private DiskProfileHelper() { + + } + + public static DiskProfile createDiskProfile(Guid storageDomainId, String name) { + DiskProfile profile = new DiskProfile(); + profile.setId(Guid.newGuid()); + profile.setName(name); + profile.setStorageDomainId(storageDomainId); + return profile; + } +} 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 0c9fdf1..7078600 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 @@ -9,12 +9,14 @@ import java.util.List; import java.util.Set; +import org.ovirt.engine.core.bll.profiles.DiskProfileHelper; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.StorageDomainManagementParameter; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StoragePool; @@ -67,8 +69,14 @@ TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - DbFacade.getInstance().getStorageDomainStaticDao().save(getStorageDomain().getStorageStaticData()); - getCompensationContext().snapshotNewEntity(getStorageDomain().getStorageStaticData()); + StorageDomainStatic storageStaticData = getStorageDomain().getStorageStaticData(); + DbFacade.getInstance().getStorageDomainStaticDao().save(storageStaticData); + // create default disk profile for type master or data storage domains + if (storageStaticData.getStorageDomainType().isDataDomain()) { + getDiskProfileDao().save(DiskProfileHelper.createDiskProfile(storageStaticData.getId(), + storageStaticData.getStorageName())); + } + getCompensationContext().snapshotNewEntity(storageStaticData); StorageDomainDynamic newStorageDynamic = new StorageDomainDynamic(null, getStorageDomain().getId(), null); getReturnValue().setActionReturnValue(getStorageDomain().getId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java index 440e5d8..cfa6bc7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java @@ -70,6 +70,9 @@ .getStoragePoolIsoMapDao() .remove(new StoragePoolIsoMapId(mapToRemove.getstorage_id(), mapToRemove.getstorage_pool_id())); + // when detaching SD for data center, we should remove any attachment to qos, which is part of the old + // data center + DbFacade.getInstance().getDiskProfileDao().nullifyQosForStorageDomain(getStorageDomain().getId()); getCompensationContext().stateChanged(); return null; } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java index 05816e7..5af755c 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java @@ -16,4 +16,15 @@ * @return the list of disk profiles */ List<DiskProfile> getAllForStorageDomain(Guid storageDomainId); + + /** + * set null in qos field for all disk profiles attached to storage domain + * (when detaching SD for data center, we should remove any attachment to qos, which is part of the + * old data center) + * + * @param storageDomainId + * Detached storage domain id + */ + void nullifyQosForStorageDomain(Guid storageDomainId); + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java index 43b8784..5e3fa4a 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java @@ -24,6 +24,12 @@ } @Override + public void nullifyQosForStorageDomain(Guid storageDomainId) { + getCallsHandler().executeModification("nullifyQosForStorageDomain", + getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId.getUuid())); + } + + @Override protected RowMapper<DiskProfile> createEntityRowMapper() { return MAPPER; } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java index 2231a20..35caf37 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java @@ -126,4 +126,22 @@ dao.remove(diskProfile.getId()); assertNull(dao.get(diskProfile.getId())); } + + @Test + public void nullifyQosForStorageDomain() { + testAllQosValuesEqualToNull(false); + dao.nullifyQosForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5); + testAllQosValuesEqualToNull(true); + } + + private void testAllQosValuesEqualToNull(boolean isAllNull) { + boolean allValues = true; + List<DiskProfile> allForStorageDomain = dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5); + assertNotNull(allForStorageDomain); + assertFalse(allForStorageDomain.isEmpty()); + for (DiskProfile diskProfile : allForStorageDomain) { + allValues &= diskProfile.getQosId() == null; + } + assertEquals(isAllNull, allValues); + } } diff --git a/packaging/dbscripts/disk_profiles_sp.sql b/packaging/dbscripts/disk_profiles_sp.sql index 7730750..8bfbfab 100644 --- a/packaging/dbscripts/disk_profiles_sp.sql +++ b/packaging/dbscripts/disk_profiles_sp.sql @@ -90,3 +90,13 @@ END; $procedure$ LANGUAGE plpgsql; + +Create or replace FUNCTION nullifyQosForStorageDomain(v_storage_domain_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN +UPDATE disk_profiles + SET qos_id = NULL + WHERE storage_domain_id = v_storage_domain_id; +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/31813 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I29aaf7b0b537f0b80b91b09e025e9487bbb69c2d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
