Sahina Bose has uploaded a new change for review. Change subject: engine: Georep sync fix deletion of sessions ......................................................................
engine: Georep sync fix deletion of sessions When syncing georep sessions for a volume, sessions from other volumes are wrongly removed. Fixing this Change-Id: Ib45f071885caf17d1acbc87fde6590476d849dc7 Signed-off-by: Sahina Bose <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterGeoRepSyncJob.java 1 file changed, 21 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/40357/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterGeoRepSyncJob.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterGeoRepSyncJob.java index 790876d..c15808b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterGeoRepSyncJob.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterGeoRepSyncJob.java @@ -86,7 +86,7 @@ throw new VdcBLLException(VdcBllErrors.GlusterVolumeGeoRepSyncFailed, "No volume information"); } VDSGroup cluster = getClusterDao().get(volume.getClusterId()); - discoverGeoRepDataInCluster(cluster, volume.getName()); + discoverGeoRepDataInCluster(cluster, volume); List<GlusterGeoRepSession> geoRepSessions = getGeoRepDao().getGeoRepSessions(volume.getId()); refreshGeoRepSessionStatusForSessions(cluster, geoRepSessions); } @@ -131,22 +131,23 @@ discoverGeoRepDataInCluster(cluster, null); } - private void discoverGeoRepDataInCluster(VDSGroup cluster, String volumeName) { + private void discoverGeoRepDataInCluster(VDSGroup cluster, GlusterVolumeEntity volume) { if (!supportsGlusterGeoRepFeature(cluster)) { return; } - Map<String, GlusterGeoRepSession> sessionsMap = getSessionsFromCLI(cluster, volumeName); + Map<String, GlusterGeoRepSession> sessionsMap = getSessionsFromCLI(cluster, volume); if (sessionsMap == null) { log.debug("No sessions retrieved for cluster: {} from CLI, nothing to do", cluster.getName()); return; } - updateDiscoveredSessions(cluster, sessionsMap); + updateDiscoveredSessions(cluster, sessionsMap, volume); } - private void updateDiscoveredSessions(VDSGroup cluster, Map<String, GlusterGeoRepSession> sessionsMap) { - removeDeletedSessions(cluster.getId(), sessionsMap); + private void updateDiscoveredSessions(VDSGroup cluster, Map<String, GlusterGeoRepSession> sessionsMap, + GlusterVolumeEntity volume) { + removeDeletedSessions(cluster.getId(), sessionsMap, volume); // for each geo-rep session, find session in database and update details. for (GlusterGeoRepSession session : sessionsMap.values()) { @@ -262,8 +263,17 @@ getGeoRepDao().saveOrUpdateDetailsInBatch(session.getSessionDetails()); } - private void removeDeletedSessions(Guid clusterId, final Map<String, GlusterGeoRepSession> sessionsMap) { - List<GlusterGeoRepSession> sessionsInDb = getGeoRepDao().getGeoRepSessionsInCluster(clusterId); + private void removeDeletedSessions(Guid clusterId, + final Map<String, GlusterGeoRepSession> sessionsMap, + GlusterVolumeEntity volume) { + List<GlusterGeoRepSession> sessionsInDb; + if (volume != null) { + // syncing for a specific volume, so retrieve only that volume's sessions + sessionsInDb = getGeoRepDao().getGeoRepSessions(volume.getId()); + } else { + sessionsInDb = getGeoRepDao().getGeoRepSessionsInCluster(clusterId); + } + if (CollectionUtils.isEmpty(sessionsInDb)) { return; } @@ -371,15 +381,16 @@ return GeoRepSessionStatus.UNKNOWN; } - private Map<String, GlusterGeoRepSession> getSessionsFromCLI(VDSGroup cluster, String volumeName) { + private Map<String, GlusterGeoRepSession> getSessionsFromCLI(VDSGroup cluster, GlusterVolumeEntity volume) { VDS upServer = getClusterUtils().getRandomUpServer(cluster.getId()); if (upServer == null) { log.debug("No UP server found in cluster '{}' for geo-rep monitoring", cluster.getName()); return null; } + String volName = volume != null ? volume.getName() : null; // get details of geo-rep sessions in cluster VDSReturnValue returnValue = runVdsCommand(VDSCommandType.GetGlusterVolumeGeoRepSessionList, - new GlusterVolumeGeoRepSessionVDSParameters(upServer.getId(), volumeName)); + new GlusterVolumeGeoRepSessionVDSParameters(upServer.getId(), volName)); if (returnValue.getSucceeded()) { List<GlusterGeoRepSession> sessions = (List<GlusterGeoRepSession>) returnValue.getReturnValue(); HashMap<String, GlusterGeoRepSession> sessionsMap = new HashMap<>(); -- To view, visit https://gerrit.ovirt.org/40357 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib45f071885caf17d1acbc87fde6590476d849dc7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sahina Bose <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
