Sahina Bose has uploaded a new change for review.

Change subject: engine: Changes to brick sync for storage network
......................................................................

engine: Changes to brick sync for storage network

Added changes to brick sync to take into account, a
different network that may have been used while adding
the brick.

Change-Id: I99f1ed0d9718be79ffac2ac04a36999c93a79ef2
Bug-Url: https://bugzilla.redhat.com/1049994
Signed-off-by: Sahina Bose <sab...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
M packaging/dbscripts/gluster_volumes_sp.sql
6 files changed, 90 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/40047/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
index 3408dde..0fec24e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
@@ -595,6 +595,13 @@
                             fetchedBrick.getBrickOrder());
                     getBrickDao().updateBrickOrder(existingBrick.getId(), 
fetchedBrick.getBrickOrder());
                 }
+                // update network id, if different
+                if (!Objects.equals(existingBrick.getNetworkId(), 
fetchedBrick.getNetworkId())) {
+                    log.info("Network address for brick '{}' detected as  
'{}'. Updating engine DB accordingly.",
+                            existingBrick.getQualifiedName(),
+                            fetchedBrick.getNetworkAddress());
+                    getBrickDao().updateBrickNetworkId(existingBrick.getId(), 
fetchedBrick.getNetworkId());
+                }
             }
         }
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
index 74c3de1..a804aca 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java
@@ -62,4 +62,6 @@
     public void updateBrickProperties(BrickProperties brickProperties);
 
     public void updateBrickProperties(List<GlusterBrickEntity> bricks);
+
+    public void updateBrickNetworkId(Guid brickId, Guid networkId);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
index 25ae268..20b0676 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java
@@ -213,6 +213,7 @@
                                 .addValue("status", entity.getStatus().name())
                                 .addValue("id", entity.getId().toString())
                                 .addValue("brick_order", 
entity.getBrickOrder())
+                                .addValue("network_id", entity.getNetworkId())
                                 .addValue("task_id",
                                         entity.getAsyncTask().getTaskId() != 
null ? entity.getAsyncTask()
                                                 .getTaskId()
@@ -267,6 +268,14 @@
     }
 
     @Override
+    public void updateBrickNetworkId(Guid brickId, Guid networkId) {
+        
getCallsHandler().executeModification("UpdateGlusterVolumeBrickNetworkId",
+                getCustomMapSqlParameterSource().
+                        addValue("id", brickId).
+                        addValue("network_id", networkId));
+    }
+
+    @Override
     public void 
updateAllBrickTasksByHostIdBrickDirInBatch(Collection<GlusterBrickEntity> 
bricks) {
         
getCallsHandler().executeStoredProcAsBatch("UpdateGlusterBrickTaskByServerIdBrickDir",
                 bricks, getBatchMapper());
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
index 49032e2..b2afc20 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java
@@ -394,4 +394,17 @@
         assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, 
newEntity1.getAsyncTask().getTaskId());
         assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, 
newEntity2.getAsyncTask().getTaskId());
     }
+
+    @Test
+    public void testUpdateBrickNetworkId() {
+        GlusterBrickEntity existingBrick = 
dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        assertNotNull(existingBrick);
+        assertNull(existingBrick.getNetworkId());
+
+        dao.updateBrickNetworkId(FixturesTool.GLUSTER_BRICK_UUID1, 
FixturesTool.NETWORK_ENGINE);
+
+        existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1);
+        assertNotNull(existingBrick);
+        assertEquals(FixturesTool.NETWORK_ENGINE, 
existingBrick.getNetworkId());
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
index c3474d8..f4b6ec9 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
@@ -12,6 +12,8 @@
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
 import org.ovirt.engine.core.common.businessentities.gluster.TransportType;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.gluster.GlusterDBUtils;
@@ -179,7 +181,7 @@
             return null;
         }
 
-        return getBrickEntity(clusterId, volumeId, brickOrder, server, 
brickDir);
+        return getBrickEntity(clusterId, volumeId, brickOrder, server, 
brickDir, null, null);
     }
 
     private GlusterBrickEntity getBrick(Guid clusterId, Guid volumeId, 
Map<String, Object> brickInfoMap, int brickOrder) {
@@ -192,6 +194,7 @@
 
         String hostUuid = (String) brickInfoMap.get(HOST_UUID);
         String brickDir = brickParts[1];
+        String hostAddress = brickParts[0];
 
         GlusterServer glusterServer = 
dbUtils.getServerByUuid(Guid.createGuidFromString(hostUuid));
         if (glusterServer == null) {
@@ -199,14 +202,30 @@
             return null;
         }
         VdsStatic server = 
DbFacade.getInstance().getVdsStaticDao().get(glusterServer.getId());
-        return getBrickEntity(clusterId, volumeId, brickOrder, server, 
brickDir);
+        String networkAddress = null;
+        Guid networkId = null;
+        if (!server.getHostName().equals(hostAddress)) {
+            networkAddress = hostAddress;
+            Network network = getGlusterNetworkId(server, networkAddress);
+            if (network != null) {
+                networkId = network.getId();
+            } else {
+                log.warn("Could not associate brick '{}' of volume '{}' with 
correct network as no gluster network found in cluster '{}'",
+                        brickName,
+                        volumeId,
+                        clusterId);
+            }
+        }
+        return getBrickEntity(clusterId, volumeId, brickOrder, server, 
brickDir, networkAddress, networkId);
     }
 
     private GlusterBrickEntity getBrickEntity(Guid clusterId,
             Guid volumeId,
             int brickOrder,
             VdsStatic server,
-            String brickDir) {
+            String brickDir,
+            String networkAddress,
+            Guid networkId) {
         GlusterBrickEntity brick = new GlusterBrickEntity();
         brick.setVolumeId(volumeId);
         brick.setBrickOrder(brickOrder);
@@ -215,9 +234,36 @@
         brick.setServerId(server.getId());
         brick.setServerName(server.getHostName());
 
+        brick.setNetworkAddress(networkAddress);
+        brick.setNetworkId(networkId);
+
         return brick;
     }
 
+    private Network getGlusterNetworkId(VdsStatic server, String 
networkAddress) {
+        List<Network> allNetworksInCluster =
+                
DbFacade.getInstance().getNetworkDao().getAllForCluster(server.getVdsGroupId());
+
+        for (Network network : allNetworksInCluster) {
+            if (network.getCluster().isGluster()
+                    && isSameNetworkAddress(server.getId(), network.getName(), 
networkAddress)) {
+                return network;
+            }
+        }
+        return null;
+    }
+
+    private Boolean isSameNetworkAddress(Guid hostId, String 
glusterNetworkName, String networkAddress) {
+        final List<VdsNetworkInterface> nics = 
DbFacade.getInstance().getInterfaceDao().getAllInterfacesForVds(hostId);
+
+        for (VdsNetworkInterface nic : nics) {
+            if (glusterNetworkName.equals(nic.getNetworkName())) {
+                return networkAddress.equals(nic.getAddress());
+            }
+        }
+        return false;
+    }
+
     public Map<Guid, GlusterVolumeEntity> getVolumes() {
         return volumes;
     }
diff --git a/packaging/dbscripts/gluster_volumes_sp.sql 
b/packaging/dbscripts/gluster_volumes_sp.sql
index 48f3e56..d3ca9a5 100644
--- a/packaging/dbscripts/gluster_volumes_sp.sql
+++ b/packaging/dbscripts/gluster_volumes_sp.sql
@@ -524,6 +524,16 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION UpdateGlusterVolumeBrickNetworkId(v_id UUID, 
v_network_id UUID)
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    UPDATE  gluster_volume_bricks
+    SET     network_id = v_network_id,
+            _update_date = LOCALTIMESTAMP
+    WHERE   id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
 
 Create or replace FUNCTION UpdateGlusterVolumeStatus(v_volume_id UUID,
                                                     v_status VARCHAR(32))


-- 
To view, visit https://gerrit.ovirt.org/40047
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I99f1ed0d9718be79ffac2ac04a36999c93a79ef2
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Sahina Bose <sab...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to