Liron Aravot has uploaded a new change for review.

Change subject: core: WIP: issues when reusing LUNs
......................................................................

core: WIP: issues when reusing LUNs

This patch fixes the following issues
1. When removing a domain that used lun storage and there's a disk used by that 
lun -
LUNs volume_group_id still contains the removed domain id which doesn't
exist anymore.

2. When extending a domain to use an existing lun, the domain id isn't
set to that lun.

3. When creating a domain from an existing lun, the domain id isn't set
to this lun.

4. When removing lun disk which isn't used as storage domain (and
therefore - not used anymore), the lun remained in the DB.

those issues caused that a created vg existed on vdsm side while not in
db which caused to an NPE during execution of GetLunsByVgIdQuery.

Change-Id: I410974389bcab24dd42fedb03be7dde5ffbd99e0
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=875909
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M backend/manager/dbscripts/storages_san_sp.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddSANStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendSANStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
8 files changed, 48 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/9228/1

diff --git a/backend/manager/dbscripts/storages_san_sp.sql 
b/backend/manager/dbscripts/storages_san_sp.sql
index dad6c9a..aeea92a 100644
--- a/backend/manager/dbscripts/storages_san_sp.sql
+++ b/backend/manager/dbscripts/storages_san_sp.sql
@@ -23,6 +23,19 @@
 
 
 
+Create or replace FUNCTION UpdateLUNsVolumeGroupId(v_LUN_id VARCHAR(50),
+v_volume_group_id VARCHAR(50))
+RETURNS VOID
+   AS $procedure$
+BEGIN
+UPDATE LUNs set volume_group_id = v_volume_group_id where LUN_id = v_LUN_ID;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+
+
 
 Create or replace FUNCTION DeleteLUN(v_LUN_id VARCHAR(50))
 RETURNS VOID
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddSANStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddSANStorageDomainCommand.java
index 59ed51e..41245b4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddSANStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddSANStorageDomainCommand.java
@@ -65,7 +65,7 @@
             @Override
             public Void runInTransaction() {
                 for (LUNs lun : luns) {
-                    proceedLUNInDb(lun, getStorageDomain().getstorage_type());
+                    proceedLUNInDb(lun, getStorageDomain().getstorage_type(), 
getStorageDomain().getstorage());
                 }
                 return null;
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendSANStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendSANStorageDomainCommand.java
index cd36ee8..4bf6b1e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendSANStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendSANStorageDomainCommand.java
@@ -25,7 +25,7 @@
     protected void executeCommand() {
         setStorageDomainStatus(StorageDomainStatus.Locked, null);
         for (LUNs lun : getParameters().getLunsList()) {
-            proceedLUNInDb(lun, getStorageDomain().getstorage_type());
+            proceedLUNInDb(lun, getStorageDomain().getstorage_type(), 
getStorageDomain().getstorage());
         }
         if (Backend
                 .getInstance()
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
index 59057d1..17815f7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
@@ -196,6 +196,8 @@
             if 
(DbFacade.getInstance().getDiskLunMapDao().getDiskIdByLunId(lun.getLUN_id()) == 
null) {
                 DbFacade.getInstance().getLunDao().remove(lun.getLUN_id());
                 numOfRemovedLuns++;
+            } else {
+                
DbFacade.getInstance().getLunDao().updateLUNsVolumeGroupId(lun.getLUN_id(), "");
             }
         }
         if (numOfRemovedLuns > 0) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
index b03719b..d984468 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
@@ -227,9 +227,16 @@
     }
 
     public static void proceedLUNInDb(final LUNs lun, StorageType storageType) 
{
+        proceedLUNInDb(lun,storageType,"");
+    }
+
+    public static void proceedLUNInDb(final LUNs lun, StorageType storageType, 
String volumeGroupId) {
         if (DbFacade.getInstance().getLunDao().get(lun.getLUN_id()) == null) {
             DbFacade.getInstance().getLunDao().save(lun);
+        } else if (!volumeGroupId.isEmpty()){
+            
DbFacade.getInstance().getLunDao().updateLUNsVolumeGroupId(lun.getLUN_id(), 
volumeGroupId);
         }
+
         for (storage_server_connections connection : lun.getLunConnections()) {
             List<storage_server_connections> connections = 
DbFacade.getInstance()
                     
.getStorageServerConnectionDao().getAllForConnection(connection);
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
index 938b680..45b12ba 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
@@ -45,6 +45,11 @@
     List<LUNs> getAll();
 
     /**
+     * Updates the lun volume group id
+     */
+    void updateLUNsVolumeGroupId(String id, String volumeGroupId);
+
+    /**
      * Saves the supplied LUN instance.
      *
      * @param lun
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
index ebab1c1..daa6820 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
@@ -46,6 +46,14 @@
         return getCallsHandler().executeRead("GetLUNByLUNId", MAPPER, 
parameterSource);
     }
 
+    @Override
+    public void updateLUNsVolumeGroupId(String id, String volumeGroupId) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource().addValue("LUN_id", id)
+                .addValue("volume_group_id", volumeGroupId);
+
+        getCallsHandler().executeModification("UpdateLUNsVolumeGroupId", 
parameterSource);
+    }
+
     @SuppressWarnings("unchecked")
     @Override
     public List<LUNs> getAllForStorageServerConnection(String id) {
@@ -55,7 +63,6 @@
         return 
getCallsHandler().executeReadList("GetLUNsBystorage_server_connection", MAPPER, 
parameterSource);
     }
 
-    @SuppressWarnings("unchecked")
     @Override
     public List<LUNs> getAllForVolumeGroup(String id) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
index 2c4436d..71c4c69 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
@@ -70,6 +70,17 @@
     }
 
     /**
+     * Ensures that LUNs are returned for the connection.
+     */
+    @Test
+    public void testUpdateLUNsVolumeGroupId() {
+        String testGroupId = "testvolgroupId";
+        dao.updateLUNsVolumeGroupId(existingLUN.getLUN_id(), testGroupId);
+        LUNs dbLun = dao.get(existingLUN.getLUN_id());
+        assertEquals("LUNs volume group id wasn't updated", testGroupId, 
dbLun.getvolume_group_id());
+    }
+
+    /**
      * Ensures that an empty collection is returned.
      */
     @Test


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

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

Reply via email to