From 799162dcb5fa008f239b115c68c4d0115b1a3dcd Mon Sep 17 00:00:00 2001 From: Gleb Aronsky Date: Mon, 15 Oct 2012 11:47:51 -0400 Subject: [PATCH 1/2] HPCC-2964 Configmgr - Allow swapping of Thor Master - For Thor Cluster - Topology, add context menu option 'Swap Master' to allow selection of a different Thor master. Signed-off-by: Gleb Aronsky --- deployment/deployutils/configenvhelper.cpp | 21 +++++++++++++++++---- esp/files/scripts/configmgr/configmgr.js | 11 ++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/deployment/deployutils/configenvhelper.cpp b/deployment/deployutils/configenvhelper.cpp index f5f1a572238..a5cfaeadd3a 100644 --- a/deployment/deployutils/configenvhelper.cpp +++ b/deployment/deployutils/configenvhelper.cpp @@ -1276,15 +1276,28 @@ bool CConfigEnvHelper::AddNewNodes(IPropertyTree* pThor, const char* szType, int continue; StringBuffer sName; + StringBuffer sThorMasterProcess; + sThorMasterProcess.appendf("./%s", XML_TAG_THORMASTERPROCESS); + sName.appendf("temp%d", i + 1); // Add process node IPropertyTree* pProcessNode = createPTree(szType); - pProcessNode->addProp(XML_ATTR_NAME, sName); - pProcessNode->addProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); - if (nPort != 0) pProcessNode->addPropInt(XML_ATTR_PORT, nPort); + + if(szType == NULL || strcmp(szType, XML_TAG_THORMASTERPROCESS) != 0 || !pThor->queryPropTree(sThorMasterProcess.str())) + { + pProcessNode->addProp(XML_ATTR_NAME, sName); + pProcessNode->addProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); + if (nPort != 0) pProcessNode->addPropInt(XML_ATTR_PORT, nPort); addNode(pProcessNode, pThor); - } + } + else + { + pThor->queryPropTree(sThorMasterProcess.str())->setProp(XML_ATTR_NAME,sName); + pThor->queryPropTree(sThorMasterProcess.str())->setProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); + if (nPort != 0) pThor->queryPropTree(sThorMasterProcess.str())->setPropInt(XML_ATTR_PORT, nPort); + } + } RenameThorInstances(pThor); UpdateThorAttributes(pThor); diff --git a/esp/files/scripts/configmgr/configmgr.js b/esp/files/scripts/configmgr/configmgr.js index e3bfbaf4929..6fcc0d1b4fe 100644 --- a/esp/files/scripts/configmgr/configmgr.js +++ b/esp/files/scripts/configmgr/configmgr.js @@ -2545,6 +2545,14 @@ function onMenuItemClickThorTopologyDelete(p_sType, p_aArgs, p_oValue) { }, top.document.navDT.getFileName(true) + 'Operation=Delete&XmlArgs=' + xmlStr); } + +function onMenuItemClickThorTopologySwapMaster(p_sType, p_aArgs, p_oValue) +{ + var slavesPerNode = getAttrValFromArr(rows.Attributes, 'slavesPerNode'); + + top.document.navDT.promptThorTopology(top.document.navDT, "Master", true, slavesPerNode); +} + function onMenuItemClickThorTopology(p_sType, p_aArgs, p_oValue) { if (top.document.forms['treeForm'].isLocked.value === 'false') return; @@ -2649,7 +2657,8 @@ function onContextMenuBeforeShow(p_sType, p_aArgs) { ], "ThorClusterMaster": [ { text: "Add Slaves...", onclick: { fn: onMenuItemClickThorTopology} }, - { text: "Add Spares...", onclick: { fn: onMenuItemClickThorTopology} } + { text: "Add Spares...", onclick: { fn: onMenuItemClickThorTopology} }, + { text: "Swap Master", onclick: { fn: onMenuItemClickThorTopologySwapMaster} }, ], "ThorClusterSlave": [ { text: "Add Spares...", onclick: { fn: onMenuItemClickThorTopology} } From 18eda8cbbc35c79539d7ad3cf787a8d3fcb3c290 Mon Sep 17 00:00:00 2001 From: Gleb Aronsky Date: Tue, 16 Oct 2012 16:46:03 -0400 Subject: [PATCH 2/2] HPCC-2964 Configmgr - Allow swapping of Thor Master - From code review: Fix memory leak - From code review: Refactor/common up code Signed-off-by: Gleb Aronsky --- deployment/deployutils/configenvhelper.cpp | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/deployment/deployutils/configenvhelper.cpp b/deployment/deployutils/configenvhelper.cpp index a5cfaeadd3a..e90e98b7516 100644 --- a/deployment/deployutils/configenvhelper.cpp +++ b/deployment/deployutils/configenvhelper.cpp @@ -1281,22 +1281,23 @@ bool CConfigEnvHelper::AddNewNodes(IPropertyTree* pThor, const char* szType, int sName.appendf("temp%d", i + 1); - // Add process node - IPropertyTree* pProcessNode = createPTree(szType); + IPropertyTree *pTree = (szType == NULL || strcmp(szType, XML_TAG_THORMASTERPROCESS) != 0) ? NULL : pThor->queryPropTree(sThorMasterProcess.str()); + bool bAdd = false; - if(szType == NULL || strcmp(szType, XML_TAG_THORMASTERPROCESS) != 0 || !pThor->queryPropTree(sThorMasterProcess.str())) + if (pTree == NULL) { - pProcessNode->addProp(XML_ATTR_NAME, sName); - pProcessNode->addProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); - if (nPort != 0) pProcessNode->addPropInt(XML_ATTR_PORT, nPort); - addNode(pProcessNode, pThor); - } - else - { - pThor->queryPropTree(sThorMasterProcess.str())->setProp(XML_ATTR_NAME,sName); - pThor->queryPropTree(sThorMasterProcess.str())->setProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); - if (nPort != 0) pThor->queryPropTree(sThorMasterProcess.str())->setPropInt(XML_ATTR_PORT, nPort); + bAdd = true; + pTree = createPTree(szType); } + + pTree->setProp(XML_ATTR_NAME,sName); + pTree->setProp(XML_ATTR_COMPUTER, computers[i]->queryProp(XML_ATTR_NAME)); + + if (nPort != 0) + pTree->setPropInt(XML_ATTR_PORT, nPort); + + if (bAdd == true) + addNode(pTree, pThor); } RenameThorInstances(pThor);