Bladeren bron

HPCC-10242 Fix preflight not working for roxie server and thor master

The problem is caused by the code added for showing eclserver into target
cluster page. The code is used to pick up server information from
environment settings using a server name. For a thor master and roxie
server, the code is not needed since the cluster tree has been picked up
from environment settings using the process name. And the code logic does
not work for thor master and roxie server. This fix adds a flag used to
skip that code for thor master and roxie server.
Kevin Wang 11 jaren geleden
bovenliggende
commit
919b6524fe
2 gewijzigde bestanden met toevoegingen van 12 en 8 verwijderingen
  1. 11 7
      esp/services/ws_machine/ws_machineService.cpp
  2. 1 1
      esp/services/ws_machine/ws_machineService.hpp

+ 11 - 7
esp/services/ws_machine/ws_machineService.cpp

@@ -648,7 +648,7 @@ void Cws_machineEx::readTargetClusterProcesses(IPropertyTree &processNode, const
         if (!pEnvironmentDirectories || !getConfigurationDirectory(pEnvironmentDirectories, "run", nodeType, process, dirStr))
             dirStr.clear().append(processNode.queryProp("@directory"));
 
-        getProcesses(constEnv, pEnvironmentSoftware, process, nodeType, dirStr.str(), machineInfoData, uniqueProcesses);
+        getProcesses(constEnv, pEnvironmentSoftware, process, nodeType, dirStr.str(), machineInfoData, false, uniqueProcesses);
         return;
     }
 
@@ -657,14 +657,14 @@ void Cws_machineEx::readTargetClusterProcesses(IPropertyTree &processNode, const
 
     if (strieq(nodeType, eqThorCluster))
     {
-        getProcesses(constEnv, pClusterProcess, process, eqThorMasterProcess, dirStr.str(), machineInfoData, uniqueProcesses);
+        getProcesses(constEnv, pClusterProcess, process, eqThorMasterProcess, dirStr.str(), machineInfoData, true, uniqueProcesses);
         getThorProcesses(constEnv, pClusterProcess, process, eqThorSlaveProcess, dirStr.str(), machineInfoData, uniqueProcesses);
         getThorProcesses(constEnv, pClusterProcess, process, eqThorSpareProcess, dirStr.str(), machineInfoData, uniqueProcesses);
     }
     else if (strieq(nodeType, eqRoxieCluster))
     {
         BoolHash uniqueRoxieProcesses;
-        getProcesses(constEnv, pClusterProcess, process, eqRoxieServerProcess, dirStr.str(), machineInfoData, uniqueProcesses, &uniqueRoxieProcesses);
+        getProcesses(constEnv, pClusterProcess, process, eqRoxieServerProcess, dirStr.str(), machineInfoData, true, uniqueProcesses, &uniqueRoxieProcesses);
     }
 }
 
@@ -734,7 +734,7 @@ void Cws_machineEx::getThorProcesses(IConstEnvironment* constEnv, IPropertyTree*
 
 void Cws_machineEx::getProcesses(IConstEnvironment* constEnv, IPropertyTree* environment, const char* processName,
                                  const char* processType, const char* directory, CGetMachineInfoData& machineInfoData,
-                                 BoolHash& uniqueProcesses, BoolHash* uniqueRoxieProcesses)
+                                 bool isThorOrRoxieProcess, BoolHash& uniqueProcesses, BoolHash* uniqueRoxieProcesses)
 {
     Owned<IPropertyTreeIterator> processes= environment->getElements(processType);
     ForEach(*processes)
@@ -742,9 +742,13 @@ void Cws_machineEx::getProcesses(IConstEnvironment* constEnv, IPropertyTree* env
         StringArray processInstances, directories;
 
         IPropertyTree &process = processes->query();
-        const char* name = process.queryProp("@name");
-        if (!name || !*name || !streq(name, processName))
-            continue;
+        //Thor master and roxie server has been checked before this call.
+        if (!isThorOrRoxieProcess)
+        {
+            const char* name = process.queryProp("@name");
+            if (!name || !*name || !streq(name, processName))
+                continue;
+        }
 
         const char* computerName = process.queryProp("@computer");
         if (computerName && *computerName)

+ 1 - 1
esp/services/ws_machine/ws_machineService.hpp

@@ -653,7 +653,7 @@ private:
     bool isLegacyFilter(const char* processType, const char* dependency);
     bool excludePartition(const char* partition) const;
     void appendProcessInstance(const char* name, const char* directory1, const char* directory2, StringArray& machineInstances, StringArray& directories);
-    void getProcesses(IConstEnvironment* constEnv, IPropertyTree* envRoot, const char* processName, const char* processType, const char* directory, CGetMachineInfoData& machineInfoData, BoolHash& uniqueProcesses, BoolHash* uniqueRoxieProcesses = NULL);
+    void getProcesses(IConstEnvironment* constEnv, IPropertyTree* envRoot, const char* processName, const char* processType, const char* directory, CGetMachineInfoData& machineInfoData, bool isThorOrRoxieProcess, BoolHash& uniqueProcesses, BoolHash* uniqueRoxieProcesses = NULL);
     void getThorProcesses(IConstEnvironment* constEnv,  IPropertyTree* cluster, const char* processName, const char* processType, const char* directory, CGetMachineInfoData& machineInfoData, BoolHash& uniqueProcesses);
     const char* getProcessTypeFromMachineType(const char* machineType);
     void readSettingsForTargetClusters(IEspContext& context, StringArray& targetClusters, CGetMachineInfoData& machineInfoData, IPropertyTree* targetClustersOut);