Shubhendu Tripathi has uploaded a new change for review.

Change subject: gluster: Correct swift status display for UNKNOWN
......................................................................

gluster: Correct swift status display for UNKNOWN

If a host goes to non-responsive state because of vdsm down the status
of swift services was not shown properly.

Corrected the same to show the status of swift as unknown if the host is
non-responsive.

Change-Id: Ic1659425e94b562916162dcddc09a19ed60b2ccf
Bug-Url: https://bugzilla.redhat.com/975326
Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterServiceSyncJob.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java
2 files changed, 45 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/15904/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterServiceSyncJob.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterServiceSyncJob.java
index 99beab2..4cdadd1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterServiceSyncJob.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterServiceSyncJob.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterClusterService;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterService;
@@ -53,14 +54,21 @@
             if (supportsGlusterServicesFeature(cluster)) {
                 try {
                     List<VDS> upServers = 
getClusterUtils().getAllUpServers(cluster.getId());
-                    if (upServers == null || upServers.isEmpty()) {
-                        log.debugFormat("No UP servers found in cluster {0}, 
not refreshing status of services.",
-                                cluster.getname());
-                        continue;
+                    List<VDS> servers = 
getClusterUtils().getAllServers(cluster.getId());
+
+                    // Update the service status on servers which are not UP
+                    List<Callable<Map<String, GlusterServiceStatus>>> 
taskListForNonRunningServers =
+                            createTaskListForNonRunningServers(servers);
+                    if (taskListForNonRunningServers != null && 
taskListForNonRunningServers.size() > 0) {
+                        ThreadPoolUtil.invokeAll(taskListForNonRunningServers);
                     }
 
+                    // Update the service status on servers which are UP
                     log.debugFormat("Syncing gluster related services for 
cluster {0}", cluster.getname());
-                    refreshClusterServices(cluster, 
ThreadPoolUtil.invokeAll(createTaskList(upServers)));
+                    List<Callable<Map<String, GlusterServiceStatus>>> taskList 
= createTaskList(upServers);
+                    if (taskList != null && taskList.size() > 0) {
+                        refreshClusterServices(cluster, 
ThreadPoolUtil.invokeAll(createTaskList(upServers)));
+                    }
                 } catch (Exception e) {
                     log.errorFormat("Error while refreshing service statuses 
of cluster {0}!",
                             cluster.getname(),
@@ -70,6 +78,34 @@
         }
     }
 
+    private List<Callable<Map<String, GlusterServiceStatus>>> 
createTaskListForNonRunningServers(List<VDS> servers) {
+        List<Callable<Map<String, GlusterServiceStatus>>> taskList =
+                new ArrayList<Callable<Map<String, GlusterServiceStatus>>>();
+        for (final VDS server : servers) {
+            if (server.getStatus() != VDSStatus.Up) {
+                taskList.add(new Callable<Map<String, GlusterServiceStatus>>() 
{
+                    @Override
+                    public Map<String, GlusterServiceStatus> call() throws 
Exception {
+                        return updateGlusterServicesStatus(server);
+                    }
+                });
+            }
+        }
+        return taskList;
+    }
+
+    private Map<String, GlusterServiceStatus> updateGlusterServicesStatus(VDS 
server) {
+        Map<String, GlusterServiceStatus> retMap = new HashMap<String, 
GlusterServiceStatus>();
+        List<GlusterServerService> serviceList =
+                
getGlusterServerServiceDao().getByServerIdAndServiceType(server.getId(), 
ServiceType.GLUSTER_SWIFT);
+        for (GlusterServerService service : serviceList) {
+            retMap.put(service.getServiceName(), GlusterServiceStatus.UNKNOWN);
+            service.setStatus(GlusterServiceStatus.UNKNOWN);
+            getGlusterServerServiceDao().update(service);
+        }
+        return retMap;
+    }
+
     private List<Callable<Map<String, GlusterServiceStatus>>> 
createTaskList(List<VDS> upServers) {
         List<Callable<Map<String, GlusterServiceStatus>>> taskList =
                 new ArrayList<Callable<Map<String, GlusterServiceStatus>>>();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java
index c36b70f..b810d9a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java
@@ -40,6 +40,10 @@
         return getVdsDao().getAllForVdsGroupWithStatus(clusterId, 
VDSStatus.Up);
     }
 
+    public List<VDS> getAllServers(Guid clusterId) {
+        return getVdsDao().getAllForVdsGroup(clusterId);
+    }
+
     public boolean hasMultipleServers(Guid clusterId) {
         return getServerCount(clusterId) > 1;
     }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic1659425e94b562916162dcddc09a19ed60b2ccf
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to