Переглянути джерело

Fix issues where a thor is in >1 target cluster

If a thor process was in more than one target cluster, the activity
page showed the target cluster as down.
Related to changes in gh-781 and gh-747

Signed-off-by: Jake Smith <jake.smith@lexisnexis.com>
Jake Smith 13 роки тому
батько
коміт
5cc2a9f118

+ 11 - 6
esp/services/ws_smc/ws_smcService.cpp

@@ -399,11 +399,17 @@ bool CWsSMCEx::onActivity(IEspContext &context, IEspActivityRequest &req, IEspAc
                 }
                 if (qname.length() > 0)
                 {
-                    serverID = runningQueueNames.find(qname);
-                    if (NotFound == serverID)
+                    StringArray qlist;
+                    CslToStringArray(qname.str(), qlist, true);
+                    ForEachItemIn(q, qlist)
                     {
-                        serverID = runningQueueNames.ordinality(); // i.e. last
-                        runningQueueNames.append(qname);
+                        const char *_qname = qlist.item(q);
+                        serverID = runningQueueNames.find(_qname);
+                        if (NotFound == serverID)
+                        {
+                            serverID = runningQueueNames.ordinality(); // i.e. last
+                            runningQueueNames.append(_qname);
+                        }
                     }
                 }
                 Owned<IPropertyTreeIterator> wuids(node.getElements("WorkUnit"));
@@ -485,9 +491,8 @@ bool CWsSMCEx::onActivity(IEspContext &context, IEspActivityRequest &req, IEspAc
                 str.clear();
                 returnCluster->setClusterName(cluster.getName(str).str());
                 str.clear();
-                returnCluster->setQueueName(cluster.getThorQueue(str).str());
-                str.clear();
                 const char *queueName = cluster.getThorQueue(str).str();
+                returnCluster->setQueueName(queueName);
                 Owned<IJobQueue> queue = createJobQueue(queueName);
                 addQueuedWorkUnits(queueName, queue, aws, context, "ThorMaster", NULL);
 

+ 13 - 7
esp/services/ws_topology/ws_topologyService.cpp

@@ -1309,19 +1309,25 @@ bool CWsTopologyEx::onTpClusterInfo(IEspContext &context, IEspTpClusterInfoReque
             StringArray qlist;
             CslToStringArray(thorQueues.str(), qlist, true);
             IArrayOf<IEspTpQueue> Queues;
+            // look for the thor processes which are listening to this clusters queue, some may be listening to other clusters queues as well.
             ForEachItemIn(q, qlist)
             {
                 const char *queueName = qlist.item(q);
-                StringBuffer xpath("Server[@name=\"ThorMaster\"][@queue=\"");
-                xpath.append(queueName).append("\"]");
-                Owned<IPropertyTreeIterator> iter = conn->getElements(xpath.str()); // NB: should only be one
+                StringBuffer xpath("Server[@name=\"ThorMaster\"]");
+                Owned<IPropertyTreeIterator> iter = conn->getElements(xpath.str());
                 ForEach(*iter)
                 {
                     IPropertyTree &server = iter->query();
-                    IEspTpQueue* pQueue = createTpQueue("","");
-                    pQueue->setName(server.queryProp("@thorname"));
-                    pQueue->setWorkUnit(server.queryProp("WorkUnit"));
-                    Queues.append(*pQueue);
+                    const char *queues = server.queryProp("@queue");
+                    StringArray thorqlist;
+                    CslToStringArray(queues, thorqlist, true);
+                    if (NotFound != thorqlist.find(queueName))
+                    {
+                        IEspTpQueue* pQueue = createTpQueue("","");
+                        pQueue->setName(server.queryProp("@thorname"));
+                        pQueue->setWorkUnit(server.queryProp("WorkUnit"));
+                        Queues.append(*pQueue);
+                    }
                 }
             }
             resp.setTpQueues(Queues);