Daniel Erez has uploaded a new change for review.

Change subject: core: synchronize lun device size on refreshLunsInfo
......................................................................

core: synchronize lun device size on refreshLunsInfo

SyncLunsInfoForIscsiStorageDomainCommand:
When detecting a mismatch in LUN device size,
store the updated size data in DB.

* Added 'updateLUNsDeviceSize' method to LunDAO.
* Updated storages_san_sp.sql accordingly.

Note: the command is invoked when activating iSCSI SD.

Change-Id: I618880c7b49c226e39f0a0830f1d4f9b71a5f304
Bug-Url: https://bugzilla.redhat.com/961532
Signed-off-by: Daniel Erez <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommandTest.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
M packaging/dbscripts/storages_san_sp.sql
6 files changed, 68 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/22887/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommand.java
index 9670081..7dc3564 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommand.java
@@ -49,9 +49,14 @@
     protected void refreshLunsInfo(List<LUNs> lunsFromVgInfo, List<LUNs> 
lunsFromDb) {
         for (LUNs lunFromVgInfo : lunsFromVgInfo) {
             // Update LUN
-            if (getLunDao().get(lunFromVgInfo.getLUN_id()) == null) {
+            LUNs lunFromDB = getLunDao().get(lunFromVgInfo.getLUN_id());
+            if (lunFromDB == null) {
                 getLunDao().save(lunFromVgInfo);
                 log.infoFormat("New LUN discovered, ID: {0}", 
lunFromVgInfo.getLUN_id());
+            }
+            else if (lunFromDB.getDeviceSize() != 
lunFromVgInfo.getDeviceSize()) {
+                getLunDao().updateLUNsDeviceSize(lunFromVgInfo.getLUN_id(), 
lunFromVgInfo.getDeviceSize());
+                log.infoFormat("Updated LUN device size, ID: {0}", 
lunFromVgInfo.getLUN_id());
             }
 
             // Update lun connections map
@@ -95,6 +100,10 @@
                 if (!lunFromDb.getLUN_id().equals(lunFromVgInfo.getLUN_id())) {
                     return true;
                 }
+                else if (lunFromDb.getDeviceSize() != 
lunFromVgInfo.getDeviceSize()) {
+                    // Size mismatch detected - refresh info is needed
+                    return true;
+                }
             }
         }
 
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommandTest.java
index 8792753..9eb4f33 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForIscsiStorageDomainCommandTest.java
@@ -70,4 +70,26 @@
         boolean isMismatch = command.isLunsInfoMismatch(lunsFromVgInfo, 
lunsFromDb);
         assertFalse(isMismatch);
     }
+
+    @Test
+    public void lunsMismatchDeviceSize() {
+        Guid pvID = Guid.newGuid();
+        Guid lunID = Guid.newGuid();
+
+        LUNs lunFromVG = new LUNs();
+        lunFromVG.setLUN_id(lunID.toString());
+        lunFromVG.setphysical_volume_id(pvID.toString());
+        lunFromVG.setDeviceSize(20);
+
+        LUNs lunFromDB = new LUNs();
+        lunFromDB.setLUN_id(lunID.toString());
+        lunFromDB.setphysical_volume_id(pvID.toString());
+        lunFromDB.setDeviceSize(10);
+
+        List<LUNs> lunsFromVgInfo = Collections.singletonList(lunFromVG);
+        List<LUNs> lunsFromDb = Collections.singletonList(lunFromDB);
+
+        boolean isMismatch = command.isLunsInfoMismatch(lunsFromVgInfo, 
lunsFromDb);
+        assertTrue(isMismatch);
+    }
 }
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 45b12ba..9d404ee 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
@@ -50,6 +50,11 @@
     void updateLUNsVolumeGroupId(String id, String volumeGroupId);
 
     /**
+     * Updates the lun device size
+     */
+    void updateLUNsDeviceSize(String id, int deviceSize);
+
+    /**
      * 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 8246525..f291e75 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
@@ -80,6 +80,14 @@
     }
 
     @Override
+    public void updateLUNsDeviceSize(String id, int deviceSize) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource().addValue("LUN_id", id)
+                .addValue("device_size", deviceSize);
+
+        getCallsHandler().executeModification("updateLUNsDeviceSize", 
parameterSource);
+    }
+
+    @Override
     public void save(LUNs lun) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
                 .addValue("LUN_id", lun.getLUN_id())
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 9a9f71d..0c804af 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
@@ -85,6 +85,17 @@
     }
 
     /**
+     * Ensures that LUN's device size is updated correctly
+     */
+    @Test
+    public void testUpdateLUNsDeviceSize() {
+        int testDeviceSize = 20;
+        dao.updateLUNsDeviceSize(existingLUN.getLUN_id(), testDeviceSize);
+        LUNs dbLun = dao.get(existingLUN.getLUN_id());
+        assertEquals("LUNs volume group id wasn't updated", testDeviceSize, 
dbLun.getDeviceSize());
+    }
+
+    /**
      * Ensures that an empty collection is returned.
      */
     @Test
diff --git a/packaging/dbscripts/storages_san_sp.sql 
b/packaging/dbscripts/storages_san_sp.sql
index c46dd14..5f07bc8 100644
--- a/packaging/dbscripts/storages_san_sp.sql
+++ b/packaging/dbscripts/storages_san_sp.sql
@@ -36,6 +36,18 @@
 
 
 
+Create or replace FUNCTION UpdateLUNsDeviceSize(v_LUN_id VARCHAR(50),
+    v_device_size INTEGER)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+UPDATE LUNs set device_size = v_device_size where LUN_id = v_LUN_ID;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+
 
 Create or replace FUNCTION DeleteLUN(v_LUN_id VARCHAR(50))
 RETURNS VOID


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I618880c7b49c226e39f0a0830f1d4f9b71a5f304
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to