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