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/63/41963/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 8aa80b7..fb3250e 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
@@ -85,7 +85,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);
     }
@@ -130,22 +130,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()) {
@@ -261,8 +262,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;
         }
@@ -370,15 +380,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/41963
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib45f071885caf17d1acbc87fde6590476d849dc7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to