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

Reply via email to