1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-04-18 21:44:02 +03:00
2022-01-21 16:43:49 +00:00

2035 lines
52 KiB
C++

/* Copyright (C) 2014 InfiniDB, Inc.
Copyright (C) 2016 MariaDB Corporation
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of
the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
/******************************************************************************************
* $Id: configure.cpp 64 2006-10-12 22:21:51Z dhill $
*
*
* List of files being updated by configure:
* Columnstore/etc/Columnstore.xml
*
*
******************************************************************************************/
/**
* @file
*/
#include <iterator>
#include <numeric>
#include <deque>
#include <iostream>
#include <ostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <limits.h>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <vector>
#include "stdio.h"
#include "ctype.h"
#include <netdb.h>
#include "liboamcpp.h"
#include "configcpp.h"
#include "installdir.h"
#include "mcsconfig.h"
using namespace std;
using namespace oam;
using namespace config;
typedef struct Performance_Module_struct
{
std::string moduleIP1;
std::string moduleIP2;
std::string moduleIP3;
std::string moduleIP4;
} PerformanceModule;
typedef std::vector<PerformanceModule> PerformanceModuleList;
int main(int argc, char* argv[])
{
setenv("CALPONT_HOME", "./", 1);
Oam oam;
string systemParentOAMModuleName;
string parentOAMModuleIPAddr;
PerformanceModuleList performancemodulelist;
int pmNumber = 0;
string prompt;
int DBRMworkernodeID = 0;
string remote_installer_debug = "0";
Config* sysConfigOld;
Config* sysConfigNew;
string systemName;
bool extextMapCheckOnly = false;
if (argc > 1)
{
string arg1 = argv[1];
if (arg1 == "-e")
extextMapCheckOnly = true;
else
systemName = arg1;
}
else
systemName = oam::UnassignedName;
try
{
std::string configFilePathOld = std::string(MCSSYSCONFDIR) + std::string("/columnstore/Columnstore.xml");
std::string configFilePathNew =
std::string(MCSSYSCONFDIR) + std::string("/columnstore/Columnstore.xml.new");
sysConfigOld = Config::makeConfig(configFilePathOld); // system version
sysConfigNew = Config::makeConfig(configFilePathNew); // released version
}
catch (...)
{
cout << "ERROR: Problem reading Columnstore.xml files\n";
exit(-1);
}
string SystemSection = "SystemConfig";
string InstallSection = "Installation";
// read cloud parameter to see if OLD is a 3.0+ or pre-3.0 build being installed
string cloud;
try
{
cloud = sysConfigOld->getConfig(InstallSection, "Cloud");
}
catch (...)
{
}
// build3 is for 3 and above 4
bool OLDbuild3 = false;
if (!cloud.empty())
OLDbuild3 = true;
// read cloud parameter to see if NEW is a 3.0+ or pre-3.0 build being installed
try
{
cloud = sysConfigNew->getConfig(InstallSection, "Cloud");
}
catch (...)
{
}
// build3 is for 3 and above 4
bool build3 = false;
if (!cloud.empty())
build3 = true;
bool build40 = false;
bool build401 = true;
// check and update PMwithUM
try
{
string PMwithUM = sysConfigOld->getConfig(InstallSection, "PMwithUM");
if (!PMwithUM.empty())
{
try
{
sysConfigNew->setConfig(InstallSection, "PMwithUM", PMwithUM);
}
catch (...)
{
cout << "ERROR: Problem setting PMwithUM in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
// check and update PMwithUM
try
{
string MySQLRep = sysConfigOld->getConfig(InstallSection, "MySQLRep");
if (!MySQLRep.empty())
{
try
{
sysConfigNew->setConfig(InstallSection, "MySQLRep", MySQLRep);
}
catch (...)
{
cout << "ERROR: Problem setting MySQLRep in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
// set gluster flag if it exists
string DataRedundancyConfig;
string DataRedundancyCopies;
string DataRedundancyStorageType;
string DataRedundancyNetworkType;
try
{
DataRedundancyConfig = sysConfigOld->getConfig(InstallSection, "DataRedundancyConfig");
DataRedundancyCopies = sysConfigOld->getConfig(InstallSection, "DataRedundancyCopies");
DataRedundancyStorageType = sysConfigOld->getConfig(InstallSection, "DataRedundancyStorageType");
DataRedundancyNetworkType = sysConfigOld->getConfig(InstallSection, "DataRedundancyNetworkType");
}
catch (...)
{
}
if (!DataRedundancyConfig.empty())
{
try
{
sysConfigNew->setConfig(InstallSection, "DataRedundancyConfig", DataRedundancyConfig);
sysConfigNew->setConfig(InstallSection, "DataRedundancyCopies", DataRedundancyCopies);
sysConfigNew->setConfig(InstallSection, "DataRedundancyStorageType", DataRedundancyStorageType);
sysConfigNew->setConfig(InstallSection, "DataRedundancyNetworkType", DataRedundancyNetworkType);
}
catch (...)
{
}
}
// check and make sure the ExtentMap variables don't get changed at install
string oldFilesPerColumnPartition;
string oldExtentsPerSegmentFile;
string newFilesPerColumnPartition;
string newExtentsPerSegmentFile;
try
{
oldFilesPerColumnPartition = sysConfigOld->getConfig("ExtentMap", "FilesPerColumnPartition");
oldExtentsPerSegmentFile = sysConfigOld->getConfig("ExtentMap", "ExtentsPerSegmentFile");
newFilesPerColumnPartition = sysConfigNew->getConfig("ExtentMap", "FilesPerColumnPartition");
newExtentsPerSegmentFile = sysConfigNew->getConfig("ExtentMap", "ExtentsPerSegmentFile");
if (oldFilesPerColumnPartition != newFilesPerColumnPartition)
{
try
{
sysConfigNew->setConfig("ExtentMap", "FilesPerColumnPartition", oldFilesPerColumnPartition);
}
catch (...)
{
cout << "ERROR: Problem setting FilesPerColumnPartition in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
if (oldExtentsPerSegmentFile != newExtentsPerSegmentFile)
{
try
{
sysConfigNew->setConfig("ExtentMap", "ExtentsPerSegmentFile", oldExtentsPerSegmentFile);
}
catch (...)
{
cout << "ERROR: Problem setting ExtentsPerSegmentFile in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
sysConfigNew->write();
if (extextMapCheckOnly)
exit(0);
systemParentOAMModuleName = "pm1";
// check if systemParentOAMModuleName (pm1) is configured, if not set to 'pm2'
// string IPaddr = sysConfigOld->getConfig("pm1_ProcessMonitor", "IPAddr");
// if ( IPaddr == "0.0.0.0" )
// systemParentOAMModuleName = "pm2";
// set Parent OAM Module Name
try
{
sysConfigNew->setConfig(SystemSection, "ParentOAMModuleName", systemParentOAMModuleName);
}
catch (...)
{
cout << "ERROR: Problem updating the Columnstore System Configuration file" << endl;
exit(-1);
}
// setup System Name
string oldSystemName;
try
{
oldSystemName = sysConfigOld->getConfig(SystemSection, "SystemName");
}
catch (...)
{
}
if (!oldSystemName.empty())
systemName = oldSystemName;
try
{
sysConfigNew->setConfig(SystemSection, "SystemName", systemName);
}
catch (...)
{
cout << "ERROR: Problem setting SystemName from the Columnstore System Configuration file" << endl;
exit(-1);
}
// WaitPeriod
try
{
string waitPeriod = sysConfigOld->getConfig(SystemSection, "WaitPeriod");
if (waitPeriod.length() > 0)
{
sysConfigNew->setConfig(SystemSection, "WaitPeriod", waitPeriod);
}
}
catch (...)
{
}
// setup HA IP Address
string HA_IPadd;
try
{
HA_IPadd = sysConfigOld->getConfig("ProcMgr_HA", "IPAddr");
}
catch (...)
{
}
if (!HA_IPadd.empty())
{
try
{
sysConfigNew->setConfig("ProcMgr_HA", "IPAddr", HA_IPadd);
}
catch (...)
{
cout << "ERROR: Problem setting ProcMgr_HA from the Columnstore System Configuration file" << endl;
exit(-1);
}
}
// setup CMP IP Addresses
string CMP_IPadd;
string CMP_port;
for (int id = 1;; id++)
{
string cmpName = "CMP" + oam.itoa(id);
try
{
CMP_IPadd = sysConfigOld->getConfig(cmpName, "IPAddr");
}
catch (...)
{
}
if (!CMP_IPadd.empty())
{
try
{
CMP_port = sysConfigOld->getConfig(cmpName, "Port");
}
catch (...)
{
}
try
{
sysConfigNew->setConfig(cmpName, "IPAddr", CMP_IPadd);
sysConfigNew->setConfig(cmpName, "Port", CMP_port);
}
catch (...)
{
cout << "ERROR: Problem setting CMP from the Columnstore System Configuration file" << endl;
exit(-1);
}
}
else
break;
}
// make DBRM backwards compatiable for pre 1.0.0.157 load
string dbrmMainProc = "DBRM_Controller";
string dbrmSubProc = "DBRM_Worker";
string numSubProc = "NumWorkers";
// CrossEngineSupport
string Host = "";
string Port = "3306";
string User = "";
string Password = "";
string TLSCA = "";
string TLSClientCert = "";
string TLSClientKey = "";
try
{
Host = sysConfigOld->getConfig("CrossEngineSupport", "Host");
Port = sysConfigOld->getConfig("CrossEngineSupport", "Port");
User = sysConfigOld->getConfig("CrossEngineSupport", "User");
Password = sysConfigOld->getConfig("CrossEngineSupport", "Password");
}
catch (...)
{
Host = "";
Port = "3306";
User = "";
Password = "";
}
try
{
sysConfigNew->setConfig("CrossEngineSupport", "Host", Host);
sysConfigNew->setConfig("CrossEngineSupport", "Port", Port);
sysConfigNew->setConfig("CrossEngineSupport", "User", User);
sysConfigNew->setConfig("CrossEngineSupport", "Password", Password);
}
catch (...)
{
}
try
{
TLSCA = sysConfigOld->getConfig("CrossEngineSupport", "TLSCA");
TLSClientCert = sysConfigOld->getConfig("CrossEngineSupport", "TLSClientCert");
TLSClientKey = sysConfigOld->getConfig("CrossEngineSupport", "TLSClientKey");
}
catch (...)
{
TLSCA = "";
TLSClientCert = "";
TLSClientKey = "";
}
try
{
sysConfigNew->setConfig("CrossEngineSupport", "TLSCA", TLSCA);
sysConfigNew->setConfig("CrossEngineSupport", "TLSClientCert", TLSClientCert);
sysConfigNew->setConfig("CrossEngineSupport", "TLSClientKey", TLSClientKey);
}
catch (...)
{
}
// QueryStats and UserPriority
string QueryStats = "N";
string UserPriority = "N";
try
{
QueryStats = sysConfigOld->getConfig("QueryStats", "Enabled");
UserPriority = sysConfigOld->getConfig("UserPriority", "Enabled");
}
catch (...)
{
QueryStats = "N";
UserPriority = "N";
}
try
{
sysConfigNew->setConfig("QueryStats", "Enabled", QueryStats);
sysConfigNew->setConfig("UserPriority", "Enabled", UserPriority);
}
catch (...)
{
}
// @bug4598, DirectIO setting
string directIO = "y";
try
{
directIO = sysConfigOld->getConfig("PrimitiveServers", "DirectIO");
}
catch (...)
{
directIO = "y";
}
try
{
sysConfigNew->setConfig("PrimitiveServers", "DirectIO", directIO);
}
catch (...)
{
}
// @bug4507, configurable pm MemoryCheck
string memCheck;
try
{
memCheck = sysConfigOld->getConfig("SystemConfig", "MemoryCheckPercent");
if (!(memCheck.empty() || memCheck == ""))
{
sysConfigNew->setConfig("SystemConfig", "MemoryCheckPercent", memCheck);
}
}
catch (...)
{
}
// Priority Settings
string HighPriorityPercentage;
try
{
HighPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "HighPriorityPercentage");
sysConfigNew->setConfig("PrimitiveServers", "HighPriorityPercentage", HighPriorityPercentage);
}
catch (...)
{
}
string MediumPriorityPercentage;
try
{
MediumPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "MediumPriorityPercentage");
sysConfigNew->setConfig("PrimitiveServers", "MediumPriorityPercentage", MediumPriorityPercentage);
}
catch (...)
{
}
string LowPriorityPercentage;
try
{
LowPriorityPercentage = sysConfigOld->getConfig("PrimitiveServers", "LowPriorityPercentage");
sysConfigNew->setConfig("PrimitiveServers", "LowPriorityPercentage", LowPriorityPercentage);
}
catch (...)
{
}
// default to single-server install type
string OserverTypeInstall = oam.itoa(oam::INSTALL_COMBINE_DM_UM_PM);
;
string NserverTypeInstall;
string OSingleServerInstall = "y";
int IserverTypeInstall;
try
{
OserverTypeInstall = sysConfigOld->getConfig(InstallSection, "ServerTypeInstall");
OSingleServerInstall = sysConfigOld->getConfig(InstallSection, "SingleServerInstall");
}
catch (...)
{
// default to Normal mult-server install type
OserverTypeInstall = oam.itoa(oam::INSTALL_COMBINE_DM_UM_PM);
OSingleServerInstall = "y";
}
// set Server Installation Type
try
{
sysConfigNew->setConfig(InstallSection, "ServerTypeInstall", OserverTypeInstall);
sysConfigNew->setConfig(InstallSection, "SingleServerInstall", OSingleServerInstall);
}
catch (...)
{
}
NserverTypeInstall = OserverTypeInstall;
IserverTypeInstall = atoi(NserverTypeInstall.c_str());
// set RotatingDestination
switch (IserverTypeInstall)
{
case (oam::INSTALL_COMBINE_DM_UM_PM): // combined #1 - dm/um/pm on a single server
{
try
{
sysConfigNew->setConfig("PrimitiveServers", "RotatingDestination", "n");
}
catch (...)
{
cout << "ERROR: Problem setting RotatingDestination in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
break;
}
}
string parentOAMModuleType = systemParentOAMModuleName.substr(0, MAX_MODULE_TYPE_SIZE);
//
// get Data storage Mount
//
string DBRootStorageType;
int DBRootCount;
string deviceName;
try
{
DBRootStorageType = sysConfigOld->getConfig(InstallSection, "DBRootStorageType");
DBRootCount = strtol(sysConfigOld->getConfig(SystemSection, "DBRootCount").c_str(), 0, 0);
}
catch (...)
{
cout << "ERROR: Problem getting DB Storage Data from the Columnstore System Configuration file" << endl;
exit(-1);
}
// 2.2 to 3.x+ DBRootStorageTypeconversion
if (DBRootStorageType == "local")
DBRootStorageType = "internal";
if (DBRootStorageType == "storage")
DBRootStorageType = "external";
try
{
sysConfigNew->setConfig(InstallSection, "DBRootStorageType", DBRootStorageType);
}
catch (...)
{
cout << "ERROR: Problem setting DBRootStorageType in the Columnstore System Configuration file" << endl;
exit(-1);
}
try
{
sysConfigNew->setConfig(SystemSection, "DBRootCount", oam.itoa(DBRootCount));
}
catch (...)
{
cout << "ERROR: Problem setting DBRoot Count in the Columnstore System Configuration file" << endl;
exit(-1);
}
//
// Update memory and cache settings
//
string NumBlocksPct;
try
{
NumBlocksPct = sysConfigOld->getConfig("DBBC", "NumBlocksPct");
}
catch (...)
{
}
if ((NumBlocksPct.empty() || NumBlocksPct == "") && IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM)
{
NumBlocksPct = "50";
}
if (!(NumBlocksPct.empty() || NumBlocksPct == ""))
{
try
{
sysConfigNew->setConfig("DBBC", "NumBlocksPct", NumBlocksPct);
}
catch (...)
{
}
}
string TotalUmMemory;
try
{
TotalUmMemory = sysConfigOld->getConfig("HashJoin", "TotalUmMemory");
}
catch (...)
{
}
try
{
sysConfigNew->setConfig("HashJoin", "TotalUmMemory", TotalUmMemory);
}
catch (...)
{
}
string TotalPmUmMemory;
try
{
TotalPmUmMemory = sysConfigOld->getConfig("HashJoin", "TotalPmUmMemory");
}
catch (...)
{
}
try
{
sysConfigNew->setConfig("HashJoin", "TotalPmUmMemory", TotalPmUmMemory);
}
catch (...)
{
}
string strNumThreads;
try
{
strNumThreads = sysConfigOld->getConfig("DBBC", "NumThreads");
}
catch (...)
{
}
if (!(strNumThreads.empty() || strNumThreads == ""))
{
try
{
sysConfigNew->setConfig("DBBC", "NumThreads", strNumThreads);
}
catch (...)
{
}
}
string MySQLPort = "3306";
try
{
MySQLPort = sysConfigOld->getConfig("Installation", "MySQLPort");
}
catch (...)
{
MySQLPort = "3306";
}
try
{
sysConfigNew->setConfig("Installation", "MySQLPort", MySQLPort);
}
catch (...)
{
}
sysConfigNew->write();
// Get list of configured system modules
SystemModuleTypeConfig sysModuleTypeConfig;
try
{
oam.getSystemConfig(sysModuleTypeConfig);
}
catch (...)
{
cout << "ERROR: Problem reading the Columnstore System Configuration file" << endl;
exit(-1);
}
//
// Module Configuration
//
string ModuleSection = "SystemModuleConfig";
unsigned int maxPMNicCount = 1;
for (unsigned int i = 0; i < sysModuleTypeConfig.moduletypeconfig.size(); i++)
{
string moduleType = sysModuleTypeConfig.moduletypeconfig[i].ModuleType;
string moduleDesc = sysModuleTypeConfig.moduletypeconfig[i].ModuleDesc;
int moduleCount = sysModuleTypeConfig.moduletypeconfig[i].ModuleCount;
// verify and setup of modules count
switch (IserverTypeInstall)
{
case (oam::INSTALL_COMBINE_DM_UM_PM):
{
if (moduleType == "um")
{
moduleCount = 0;
try
{
string ModuleCountParm = "ModuleCount" + oam.itoa(i + 1);
sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
continue;
}
catch (...)
{
cout << "ERROR: Problem setting Module Count in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
else
{
try
{
string ModuleCountParm = "ModuleCount" + oam.itoa(i + 1);
sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
}
catch (...)
{
cout << "ERROR: Problem setting Module Count in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
break;
}
default:
{
try
{
string ModuleCountParm = "ModuleCount" + oam.itoa(i + 1);
sysConfigNew->setConfig(ModuleSection, ModuleCountParm, oam.itoa(moduleCount));
}
catch (...)
{
cout << "ERROR: Problem setting Module Count in the Columnstore System Configuration file" << endl;
exit(-1);
}
break;
}
}
if (moduleCount == 0)
// no modules equipped for this Module Type, skip
continue;
if (moduleType == "pm")
pmNumber = moduleCount;
// for 2.x to 3.x upgrade dbroot assignments
int dbrootNum = 0;
int systemDBRootCount = 0;
int dbrootCountPerModule = 0;
if (moduleType == "pm" && !OLDbuild3)
{
dbrootNum = 1;
systemDBRootCount = DBRootCount;
if (pmNumber > 0)
dbrootCountPerModule = DBRootCount / pmNumber;
if (dbrootCountPerModule == 0)
dbrootCountPerModule = 1;
}
// get Module Name IP addresses and Host Names
DeviceNetworkList::iterator listPT = sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.begin();
for (; listPT != sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.end(); listPT++)
{
PerformanceModule performancemodule;
string moduleName = (*listPT).DeviceName;
int moduleID = atoi(moduleName.substr(MAX_MODULE_TYPE_SIZE, MAX_MODULE_ID_SIZE).c_str());
string moduleDisableState = (*listPT).DisableState;
// set Module Disable State
string moduleDisableStateParm = "ModuleDisableState" + oam.itoa(moduleID) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleDisableStateParm, moduleDisableState);
}
catch (...)
{
cout
<< "ERROR: Problem setting ModuleDisableState in the Columnstore System Configuration file for " +
moduleName
<< endl;
exit(-1);
}
for (unsigned int nicID = 1; nicID < MAX_NIC + 1; nicID++)
{
string moduleIPAddr = oam::UnassignedIpAddr;
string moduleHostName = oam::UnassignedName;
HostConfigList::iterator pt1 = (*listPT).hostConfigList.begin();
for (; pt1 != (*listPT).hostConfigList.end(); pt1++)
{
if (moduleName == (*listPT).DeviceName && (*pt1).NicID == nicID)
{
moduleIPAddr = (*pt1).IPAddr;
moduleHostName = (*pt1).HostName;
break;
}
}
if (moduleHostName.empty() || (moduleHostName == oam::UnassignedName))
// exit out to next module ID
break;
if (moduleIPAddr.empty())
moduleIPAddr = oam::UnassignedIpAddr;
string moduleNameDesc = moduleDesc + " #" + oam.itoa(moduleID);
// set New Module Host Name
string moduleHostNameParm =
"ModuleHostName" + oam.itoa(moduleID) + "-" + oam.itoa(nicID) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleHostNameParm, moduleHostName);
}
catch (...)
{
cout << "ERROR: Problem setting Host Name in the Columnstore System Configuration file" << endl;
exit(-1);
}
// set Module IP address
string moduleIPAddrNameParm =
"ModuleIPAddr" + oam.itoa(moduleID) + "-" + oam.itoa(nicID) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleIPAddrNameParm, moduleIPAddr);
}
catch (...)
{
cout << "ERROR: Problem setting IP address in the Columnstore System Configuration file" << endl;
exit(-1);
}
if (moduleType == "pm")
{
switch (nicID)
{
case 1: performancemodule.moduleIP1 = moduleIPAddr; break;
case 2: performancemodule.moduleIP2 = moduleIPAddr; break;
case 3: performancemodule.moduleIP3 = moduleIPAddr; break;
case 4: performancemodule.moduleIP4 = moduleIPAddr; break;
}
if (maxPMNicCount < nicID)
maxPMNicCount = nicID;
}
if (nicID > 1)
continue;
// set port addresses
if (moduleName == systemParentOAMModuleName)
{
parentOAMModuleIPAddr = moduleIPAddr;
// exit out if parentOAMModuleIPAddr is NOT set, this means the System Columnstore.xml isn't
// configured
if (parentOAMModuleIPAddr == "0.0.0.0")
{
cout << "ERROR: System Columnstore.xml not configured" << endl;
exit(-1);
}
// set Parent Processes Port IP Address
string parentProcessMonitor = systemParentOAMModuleName + "_ProcessMonitor";
sysConfigNew->setConfig(parentProcessMonitor, "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig(parentProcessMonitor, "Port", "8800");
sysConfigNew->setConfig("ProcMgr", "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig("ProcMgr_Alarm", "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig("ProcStatusControl", "IPAddr", parentOAMModuleIPAddr);
string parentServerMonitor = systemParentOAMModuleName + "_ServerMonitor";
sysConfigNew->setConfig(parentServerMonitor, "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig(parentServerMonitor, "Port", "8622");
if (build3)
{
string portName = systemParentOAMModuleName + "_WriteEngineServer";
sysConfigNew->setConfig(portName, "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig(portName, "Port", "8630");
}
else
{
sysConfigNew->setConfig("DDLProc", "IPAddr", parentOAMModuleIPAddr);
sysConfigNew->setConfig("DMLProc", "IPAddr", parentOAMModuleIPAddr);
}
if (IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM)
{
// set User Module's IP Addresses
string Section = "ExeMgr" + oam.itoa(moduleID);
sysConfigNew->setConfig(Section, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(Section, "Port", "8601");
// set Performance Module's IP's to first NIC IP entered
sysConfigNew->setConfig("DDLProc", "IPAddr", moduleIPAddr);
sysConfigNew->setConfig("DMLProc", "IPAddr", moduleIPAddr);
}
}
else
{
// set child Process Monitor Port IP Address
string portName = moduleName + "_ProcessMonitor";
sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(portName, "Port", "8800");
// set child Server Monitor Port IP Address
portName = moduleName + "_ServerMonitor";
sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(portName, "Port", "8622");
// set Performance Module WriteEngineServer Port IP Address
if (moduleType == "pm" && build3)
{
portName = moduleName + "_WriteEngineServer";
sysConfigNew->setConfig(portName, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(portName, "Port", "8630");
}
// set User Module's IP Addresses
if (moduleType == "um" ||
(moduleType == "pm" && IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM))
{
string Section = "ExeMgr" + oam.itoa(moduleID);
sysConfigNew->setConfig(Section, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(Section, "Port", "8601");
}
}
// set Performance Module's IP's to first NIC IP entered
if (moduleName == "um1" && build3)
{
sysConfigNew->setConfig("DDLProc", "IPAddr", moduleIPAddr);
sysConfigNew->setConfig("DMLProc", "IPAddr", moduleIPAddr);
}
// setup DBRM processes
if (moduleName == systemParentOAMModuleName)
sysConfigNew->setConfig(dbrmMainProc, "IPAddr", moduleIPAddr);
DBRMworkernodeID++;
string DBRMSection = dbrmSubProc + oam.itoa(DBRMworkernodeID);
sysConfigNew->setConfig(DBRMSection, "IPAddr", moduleIPAddr);
sysConfigNew->setConfig(DBRMSection, "Module", moduleName);
} // end of nicID loop
// set dbroot assigments
DeviceDBRootList::iterator pt3 = sysModuleTypeConfig.moduletypeconfig[i].ModuleDBRootList.begin();
// this will be empty if upgrading from 2.2
if (sysModuleTypeConfig.moduletypeconfig[i].ModuleDBRootList.size() == 0)
{
if (!OLDbuild3 && moduleType == "pm")
{
int dbrootCount = dbrootCountPerModule;
string moduleCountParm = "ModuleDBRootCount" + oam.itoa(moduleID) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleCountParm, oam.itoa(dbrootCount));
}
catch (...)
{
cout << "ERROR: Problem setting Host Name in the Columnstore System Configuration file" << endl;
exit(-1);
}
int entry = 1;
for (; entry < dbrootCountPerModule + 1; entry++)
{
int dbrootid = dbrootNum;
if (dbrootNum > systemDBRootCount)
dbrootid = 0;
else
dbrootNum++;
string moduleDBRootIDParm =
"ModuleDBRootID" + oam.itoa(moduleID) + "-" + oam.itoa(entry) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleDBRootIDParm, oam.itoa(dbrootid));
}
catch (...)
{
cout << "ERROR: Problem setting Host Name in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
}
else
{
for (; pt3 != sysModuleTypeConfig.moduletypeconfig[i].ModuleDBRootList.end(); pt3++)
{
if ((*pt3).dbrootConfigList.size() > 0)
{
int moduleID = (*pt3).DeviceID;
DBRootConfigList::iterator pt4 = (*pt3).dbrootConfigList.begin();
int dbrootCount = (*pt3).dbrootConfigList.size();
string moduleCountParm = "ModuleDBRootCount" + oam.itoa(moduleID) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleCountParm, oam.itoa(dbrootCount));
}
catch (...)
{
cout << "ERROR: Problem setting Host Name in the Columnstore System Configuration file" << endl;
exit(-1);
}
int entry = 1;
for (; pt4 != (*pt3).dbrootConfigList.end(); pt4++, entry++)
{
int dbrootid = *pt4;
string moduleDBRootIDParm =
"ModuleDBRootID" + oam.itoa(moduleID) + "-" + oam.itoa(entry) + "-" + oam.itoa(i + 1);
try
{
sysConfigNew->setConfig(ModuleSection, moduleDBRootIDParm, oam.itoa(dbrootid));
}
catch (...)
{
cout << "ERROR: Problem setting Host Name in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
}
}
if ((moduleType == "pm") || (IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM))
performancemodulelist.push_back(performancemodule);
} // end of module loop
sysConfigNew->write();
} // end of i for loop
if (performancemodulelist.size() == 0)
{
cout << "ERROR: performancemodulelist is empty, exiting..." << endl;
exit(-1);
}
// set dm count to 0 always
try
{
sysConfigNew->setConfig(ModuleSection, "ModuleCount1", "0");
}
catch (...)
{
cout << "ERROR: Problem setting Module Count in the Columnstore System Configuration file" << endl;
exit(-1);
}
// setup DBRM Controller
sysConfigNew->setConfig(dbrmMainProc, numSubProc, oam.itoa(DBRMworkernodeID));
// setup PrimitiveServers parameters
try
{
sysConfigNew->setConfig("PrimitiveServers", "ConnectionsPerPrimProc", oam.itoa(maxPMNicCount * 2));
}
catch (...)
{
cout << "ERROR: Problem setting ConnectionsPerPrimProc in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
// set the PM Ports based on Number of PM modules equipped, if any equipped
int minPmPorts = 32;
sysConfigNew->setConfig("PrimitiveServers", "Count", oam.itoa(pmNumber));
int pmPorts = pmNumber * (maxPMNicCount * 2);
if (pmPorts < minPmPorts)
pmPorts = minPmPorts;
if (pmNumber > 0 || (IserverTypeInstall == oam::INSTALL_COMBINE_DM_UM_PM))
{
const string PM = "PMS";
for (int pmsID = 1; pmsID < pmPorts + 1;)
{
for (unsigned int j = 1; j < maxPMNicCount + 1; j++)
{
PerformanceModuleList::iterator list1 = performancemodulelist.begin();
for (; list1 != performancemodulelist.end(); list1++)
{
string pmName = PM + oam.itoa(pmsID);
string IpAddr;
switch (j)
{
case 1: IpAddr = (*list1).moduleIP1; break;
case 2: IpAddr = (*list1).moduleIP2; break;
case 3: IpAddr = (*list1).moduleIP3; break;
case 4: IpAddr = (*list1).moduleIP4; break;
}
if (!IpAddr.empty() && IpAddr != oam::UnassignedIpAddr)
{
sysConfigNew->setConfig(pmName, "IPAddr", IpAddr);
pmsID++;
if (pmsID > pmPorts)
break;
}
}
if (pmsID > pmPorts)
break;
}
}
}
sysConfigNew->write();
//
// Configure NMS Addresses
//
string NMSIPAddress;
try
{
NMSIPAddress = sysConfigOld->getConfig(SystemSection, "NMSIPAddress");
}
catch (...)
{
cout << "ERROR: Problem getting NMSIPAddress from Columnstore System Configuration file" << endl;
exit(-1);
}
try
{
sysConfigNew->setConfig(SystemSection, "NMSIPAddress", NMSIPAddress);
}
catch (...)
{
cout << "ERROR: Problem setting NMSIPAddress in the Columnstore System Configuration file" << endl;
exit(-1);
}
//
// setup TransactionArchivePeriod
//
string transactionArchivePeriod;
try
{
transactionArchivePeriod = sysConfigOld->getConfig(SystemSection, "TransactionArchivePeriod");
}
catch (...)
{
cout << "ERROR: Problem getting transactionArchivePeriod from Columnstore System Configuration file"
<< endl;
exit(-1);
}
try
{
sysConfigNew->setConfig(SystemSection, "TransactionArchivePeriod", transactionArchivePeriod);
}
catch (...)
{
cout << "ERROR: Problem setting IP address in the Columnstore System Configuration file" << endl;
exit(-1);
}
//
// 3 and above configuration items
//
if (build3)
{
// setup cloud parameters
string UMStorageType;
string PMInstanceType;
string UMInstanceType;
string UMSecurityGroup;
string UMVolumeSize;
string PMVolumeSize;
string AmazonAutoTagging;
string AmazonVPCNextPrivateIP;
string AmazonDeviceName;
string UMVolumeType;
string UMVolumeIOPS;
string PMVolumeType;
string PMVolumeIOPS;
try
{
cloud = sysConfigOld->getConfig(InstallSection, "Cloud");
UMStorageType = sysConfigOld->getConfig(InstallSection, "UMStorageType");
PMInstanceType = sysConfigOld->getConfig(InstallSection, "PMInstanceType");
UMInstanceType = sysConfigOld->getConfig(InstallSection, "UMInstanceType");
UMSecurityGroup = sysConfigOld->getConfig(InstallSection, "UMSecurityGroup");
UMVolumeSize = sysConfigOld->getConfig(InstallSection, "UMVolumeSize");
PMVolumeSize = sysConfigOld->getConfig(InstallSection, "PMVolumeSize");
AmazonAutoTagging = sysConfigOld->getConfig(InstallSection, "AmazonAutoTagging");
AmazonVPCNextPrivateIP = sysConfigOld->getConfig(InstallSection, "AmazonVPCNextPrivateIP");
AmazonDeviceName = sysConfigOld->getConfig(InstallSection, "AmazonDeviceName");
UMVolumeType = sysConfigOld->getConfig(InstallSection, "UMVolumeType");
UMVolumeIOPS = sysConfigOld->getConfig(InstallSection, "UMVolumeIOPS");
PMVolumeType = sysConfigOld->getConfig(InstallSection, "PMVolumeType");
PMVolumeIOPS = sysConfigOld->getConfig(InstallSection, "PMVolumeIOPS");
}
catch (...)
{
}
// this is for 2.2 to 4.x builds
if (UMStorageType.empty() || UMStorageType == "")
UMStorageType = "internal";
// 3.x upgrade
if (build3 && !build40 && !build401)
{
if (cloud == "no" || cloud == oam::UnassignedName)
cloud = "n";
if (cloud == "amazon-ec2" || cloud == "amazon-vpc")
cloud = "amazon";
}
// 4.0 upgrade
if (build40 && !build401)
{
if (cloud == "no" || cloud == "n")
cloud = oam::UnassignedName;
}
// 4.0.1+ upgrade
if (build401)
{
if (cloud == "no" || cloud == "n")
cloud = oam::UnassignedName;
if (cloud == "amazon")
cloud = "amazon-ec2";
if (AmazonVPCNextPrivateIP.empty())
AmazonVPCNextPrivateIP = oam::UnassignedName;
try
{
sysConfigNew->setConfig(InstallSection, "AmazonVPCNextPrivateIP", AmazonVPCNextPrivateIP);
}
catch (...)
{
// cout << "ERROR: Problem setting Cloud Parameters from the Columnstore System
//Configuration file" << endl; exit(-1);
}
}
try
{
sysConfigNew->setConfig(InstallSection, "Cloud", cloud);
sysConfigNew->setConfig(InstallSection, "UMStorageType", UMStorageType);
sysConfigNew->setConfig(InstallSection, "PMInstanceType", PMInstanceType);
sysConfigNew->setConfig(InstallSection, "UMInstanceType", UMInstanceType);
sysConfigNew->setConfig(InstallSection, "UMSecurityGroup", UMSecurityGroup);
sysConfigNew->setConfig(InstallSection, "UMVolumeSize", UMVolumeSize);
sysConfigNew->setConfig(InstallSection, "PMVolumeSize", PMVolumeSize);
sysConfigNew->setConfig(InstallSection, "AmazonAutoTagging", AmazonAutoTagging);
sysConfigNew->setConfig(InstallSection, "AmazonDeviceName", AmazonDeviceName);
sysConfigNew->setConfig(InstallSection, "UMVolumeType", UMVolumeType);
sysConfigNew->setConfig(InstallSection, "UMVolumeIOPS", UMVolumeIOPS);
sysConfigNew->setConfig(InstallSection, "PMVolumeType", PMVolumeType);
sysConfigNew->setConfig(InstallSection, "PMVolumeIOPS", PMVolumeIOPS);
}
catch (...)
{
// cout << "ERROR: Problem setting Cloud Parameters from the Columnstore System
//Configuration file" << endl; exit(-1);
}
if (cloud == "amazon-ec2" || cloud == "amazon-vpc")
cloud = "amazon";
// setup um storage
if (cloud == "amazon" && UMStorageType == "external")
{
try
{
systemStorageInfo_t t;
t = oam.getStorageConfig();
ModuleTypeConfig moduletypeconfig;
oam.getSystemConfig("um", moduletypeconfig);
for (int id = 1; id < moduletypeconfig.ModuleCount + 1; id++)
{
string volumeNameID = "UMVolumeName" + oam.itoa(id);
string volumeName = oam::UnassignedName;
string deviceNameID = "UMVolumeDeviceName" + oam.itoa(id);
string deviceName = oam::UnassignedName;
try
{
volumeName = sysConfigOld->getConfig(InstallSection, volumeNameID);
deviceName = sysConfigOld->getConfig(InstallSection, deviceNameID);
}
catch (...)
{
}
try
{
sysConfigNew->setConfig(InstallSection, volumeNameID, volumeName);
sysConfigNew->setConfig(InstallSection, deviceNameID, deviceName);
}
catch (...)
{
}
}
}
catch (exception& e)
{
cout << endl << "**** getStorageConfig Failed : " << e.what() << endl;
}
}
// setup dbroot storage
try
{
DBRootConfigList dbrootConfigList;
oam.getSystemDbrootConfig(dbrootConfigList);
DBRootConfigList::iterator pt = dbrootConfigList.begin();
for (; pt != dbrootConfigList.end(); pt++)
{
int id = *pt;
string DBrootID = "DBRoot" + oam.itoa(id);
;
string pathID = "/var/lib/columnstore/data" + oam.itoa(id);
try
{
sysConfigNew->setConfig(SystemSection, DBrootID, pathID);
}
catch (...)
{
cout << "ERROR: Problem setting DBRoot in the Columnstore System Configuration file" << endl;
exit(-1);
}
if (cloud == "amazon" && DBRootStorageType == "external")
{
string volumeNameID = "PMVolumeName" + oam.itoa(id);
string volumeName = oam::UnassignedName;
string deviceNameID = "PMVolumeDeviceName" + oam.itoa(id);
string deviceName = oam::UnassignedName;
string amazondeviceNameID = "PMVolumeAmazonDeviceName" + oam.itoa(id);
string amazondeviceName = oam::UnassignedName;
try
{
volumeName = sysConfigOld->getConfig(InstallSection, volumeNameID);
deviceName = sysConfigOld->getConfig(InstallSection, deviceNameID);
amazondeviceName = sysConfigOld->getConfig(InstallSection, amazondeviceNameID);
}
catch (...)
{
}
try
{
sysConfigNew->setConfig(InstallSection, volumeNameID, volumeName);
sysConfigNew->setConfig(InstallSection, deviceNameID, deviceName);
sysConfigNew->setConfig(InstallSection, amazondeviceNameID, amazondeviceName);
}
catch (...)
{
}
string UMVolumeSize = oam::UnassignedName;
string PMVolumeSize = oam::UnassignedName;
try
{
UMVolumeSize = sysConfigOld->getConfig(InstallSection, "UMVolumeSize");
PMVolumeSize = sysConfigOld->getConfig(InstallSection, "PMVolumeSize");
}
catch (...)
{
}
try
{
sysConfigNew->setConfig(InstallSection, "UMVolumeSize", UMVolumeSize);
sysConfigNew->setConfig(InstallSection, "PMVolumeSize", PMVolumeSize);
}
catch (...)
{
}
}
if (!DataRedundancyConfig.empty())
{
try
{
string dbrootPMsID = "DBRoot" + oam.itoa(id) + "PMs";
string dbrootPMs = sysConfigOld->getConfig("DataRedundancyConfig", dbrootPMsID);
try
{
sysConfigNew->setConfig("DataRedundancyConfig", dbrootPMsID, dbrootPMs);
}
catch (...)
{
}
}
catch (...)
{
}
}
}
}
catch (exception& e)
{
cout << endl << "**** getSystemDbrootConfig Failed : " << e.what() << endl;
}
}
else
{
// pre 3.0 only
string DBRootStorageLoc;
for (int i = 1; i < DBRootCount + 1; i++)
{
if (DBRootStorageType != "local")
{
string DBRootStorageLocID = "DBRootStorageLoc" + oam.itoa(i);
try
{
DBRootStorageLoc = sysConfigOld->getConfig(InstallSection, DBRootStorageLocID);
}
catch (...)
{
cout << "ERROR: Problem getting '" + DBRootStorageLocID +
"' from the Columnstore System Configuration file"
<< endl;
exit(-1);
}
try
{
sysConfigNew->setConfig(InstallSection, DBRootStorageLocID, DBRootStorageLoc);
}
catch (...)
{
cout << "ERROR: Problem setting '" + DBRootStorageLocID +
"' in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
string DBrootID = "DBRoot" + oam.itoa(i);
string pathID = "/var/lib/columnstore/data" + oam.itoa(i);
try
{
sysConfigNew->setConfig(SystemSection, DBrootID, pathID);
}
catch (...)
{
cout << "ERROR: Problem setting DBRoot in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
// do elastic IP configuration
int AmazonElasticIPCount = 0;
try
{
AmazonElasticIPCount = atoi(sysConfigOld->getConfig(InstallSection, "AmazonElasticIPCount").c_str());
if (AmazonElasticIPCount > 0)
{
for (int id = 1; id < AmazonElasticIPCount + 1; id++)
{
string AmazonElasticModule = "AmazonElasticModule" + oam.itoa(id);
string ELmoduleName;
string AmazonElasticIPAddr = "AmazonElasticIPAddr" + oam.itoa(id);
string ELIPaddress;
ELmoduleName = sysConfigOld->getConfig(InstallSection, AmazonElasticModule);
ELIPaddress = sysConfigOld->getConfig(InstallSection, AmazonElasticIPAddr);
try
{
sysConfigNew->setConfig(InstallSection, "AmazonElasticIPCount", oam.itoa(AmazonElasticIPCount));
sysConfigNew->setConfig(InstallSection, AmazonElasticModule, ELmoduleName);
sysConfigNew->setConfig(InstallSection, AmazonElasticIPAddr, ELIPaddress);
}
catch (...)
{
}
}
}
}
catch (...)
{
}
try
{
oam.getSystemConfig("AmazonElasticIPCount", AmazonElasticIPCount);
}
catch (...)
{
AmazonElasticIPCount = 0;
}
// ConcurrentTransactions
string ConcurrentTransactions;
try
{
ConcurrentTransactions = sysConfigOld->getConfig(SystemSection, "ConcurrentTransactions");
if (!ConcurrentTransactions.empty())
{
try
{
sysConfigNew->setConfig(SystemSection, "ConcurrentTransactions", ConcurrentTransactions);
}
catch (...)
{
cout << "ERROR: Problem setting ConcurrentTransactions in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
// NetworkCompression Enabled
string NetworkCompression;
try
{
NetworkCompression = sysConfigOld->getConfig("NetworkCompression", "Enabled");
if (!NetworkCompression.empty())
{
try
{
sysConfigNew->setConfig("NetworkCompression", "Enabled", NetworkCompression);
}
catch (...)
{
cout << "ERROR: Problem setting NetworkCompression in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
// hadoop
string DataFilePlugin;
try
{
DataFilePlugin = sysConfigOld->getConfig(SystemSection, "DataFilePlugin");
if (!DataFilePlugin.empty())
{
try
{
sysConfigNew->setConfig(SystemSection, "DataFilePlugin", DataFilePlugin);
}
catch (...)
{
cout << "ERROR: Problem setting DataFilePlugin in the Columnstore System Configuration file" << endl;
exit(-1);
}
string ExtentsPerSegmentFile;
try
{
ExtentsPerSegmentFile = sysConfigOld->getConfig("ExtentMap", "ExtentsPerSegmentFile");
try
{
sysConfigNew->setConfig("ExtentMap", "ExtentsPerSegmentFile", ExtentsPerSegmentFile);
}
catch (...)
{
cout << "ERROR: Problem setting ExtentsPerSegmentFile in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
catch (...)
{
}
}
}
catch (...)
{
}
string DataFileLog;
try
{
DataFileLog = sysConfigOld->getConfig(SystemSection, "DataFileLog");
if (!DataFileLog.empty())
{
try
{
sysConfigNew->setConfig(SystemSection, "DataFileLog", DataFileLog);
}
catch (...)
{
cout << "ERROR: Problem setting DataFileLog in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
string AllowDiskBasedJoin;
string TempFileCompression;
try
{
AllowDiskBasedJoin = sysConfigOld->getConfig("HashJoin", "AllowDiskBasedJoin");
if (!AllowDiskBasedJoin.empty())
{
TempFileCompression = sysConfigOld->getConfig("HashJoin", "TempFileCompression");
try
{
sysConfigNew->setConfig("HashJoin", "AllowDiskBasedJoin", AllowDiskBasedJoin);
sysConfigNew->setConfig("HashJoin", "TempFileCompression", TempFileCompression);
}
catch (...)
{
cout << "ERROR: Problem setting AllowDiskBasedJoin in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
string AllowDiskBasedAggregation;
// string TempFileCompression;
try
{
AllowDiskBasedAggregation = sysConfigOld->getConfig("RowAggregation", "AllowDiskBasedAggregation");
if (!AllowDiskBasedAggregation.empty())
{
try
{
sysConfigNew->setConfig("RowAggregation", "AllowDiskBasedAggregation", AllowDiskBasedAggregation);
}
catch (...)
{
cout
<< "ERROR: Problem setting AllowDiskBasedAggregation in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
string SystemTempFileDir;
try
{
SystemTempFileDir = sysConfigOld->getConfig("SystemConfig", "SystemTempFileDir");
if (!SystemTempFileDir.empty())
{
SystemTempFileDir = sysConfigOld->getConfig("SystemConfig", "SystemTempFileDir");
try
{
sysConfigNew->setConfig("SystemConfig", "SystemTempFileDir", SystemTempFileDir);
}
catch (...)
{
cout << "ERROR: Problem setting SystemTempFileDir in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
try
{
Host = sysConfigOld->getConfig("QueryTele", "Host");
if (!Host.empty())
{
Port = sysConfigOld->getConfig("QueryTele", "Port");
try
{
sysConfigNew->setConfig("QueryTele", "Host", Host);
sysConfigNew->setConfig("QueryTele", "Port", Port);
}
catch (...)
{
cout << "ERROR: Problem setting QueryTele in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
try
{
string AmazonAccessKey = sysConfigOld->getConfig("Installation", "AmazonAccessKey");
if (!AmazonAccessKey.empty())
{
try
{
sysConfigNew->setConfig("Installation", "AmazonAccessKey", AmazonAccessKey);
}
catch (...)
{
cout << "ERROR: Problem setting AmazonAccessKey in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
try
{
string AmazonSecretKey = sysConfigOld->getConfig("Installation", "AmazonSecretKey");
if (!AmazonSecretKey.empty())
{
try
{
sysConfigNew->setConfig("Installation", "AmazonSecretKey", AmazonSecretKey);
}
catch (...)
{
cout << "ERROR: Problem setting AmazonSecretKey in the Columnstore System Configuration file" << endl;
exit(-1);
}
}
}
catch (...)
{
}
try
{
string LockFileDirectory = sysConfigOld->getConfig("Installation", "LockFileDirectory");
if (!LockFileDirectory.empty())
{
try
{
sysConfigNew->setConfig("Installation", "LockFileDirectory", LockFileDirectory);
}
catch (...)
{
cout << "ERROR: Problem setting LockFileDirectory in the Columnstore System Configuration file"
<< endl;
exit(-1);
}
}
}
catch (...)
{
}
// add entries from tuning guide
string ColScanReadAheadBlocks;
string PrefetchThreshold;
string MaxOutstandingRequests;
string PmMaxMemorySmallSide;
string ThreadPoolSize;
try
{
ColScanReadAheadBlocks = sysConfigOld->getConfig("PrimitiveServers", "ColScanReadAheadBlocks");
PrefetchThreshold = sysConfigOld->getConfig("PrimitiveServers", "PrefetchThreshold");
PmMaxMemorySmallSide = sysConfigOld->getConfig("HashJoin", "PmMaxMemorySmallSide");
ThreadPoolSize = sysConfigOld->getConfig("JobList", "ThreadPoolSize");
}
catch (...)
{
}
try
{
sysConfigNew->setConfig("PrimitiveServers", "ColScanReadAheadBlocks", ColScanReadAheadBlocks);
sysConfigNew->setConfig("PrimitiveServers", "PrefetchThreshold", PrefetchThreshold);
sysConfigNew->setConfig("HashJoin", "PmMaxMemorySmallSide", PmMaxMemorySmallSide);
sysConfigNew->setConfig("JobList", "ThreadPoolSize", ThreadPoolSize);
}
catch (...)
{
}
// ExeMgr Optional settings
try
{
// threadpool size. This is the size the pool will idle down to if it grows bigger
string threadPoolSize;
// Time between checks to see if memory is exausted
string secondsBetweenMemChecks;
// Max percent of total memory used by everything before we kill ourself
string maxPct;
// Maximum number of concurrent queries. Any more will have to wait.
string execQueueSize;
threadPoolSize = sysConfigOld->getConfig("ExeMgr1", "ThreadPoolSize");
if (!threadPoolSize.empty())
{
sysConfigNew->setConfig("ExeMgr1", "ThreadPoolSize", threadPoolSize);
}
secondsBetweenMemChecks = sysConfigOld->getConfig("ExeMgr1", "SecondsBetweenMemChecks");
if (!secondsBetweenMemChecks.empty())
{
sysConfigNew->setConfig("ExeMgr1", "SecondsBetweenMemChecks", secondsBetweenMemChecks);
}
maxPct = sysConfigOld->getConfig("ExeMgr1", "MaxPct");
if (!maxPct.empty())
{
sysConfigNew->setConfig("ExeMgr1", "MaxPct", maxPct);
}
execQueueSize = sysConfigOld->getConfig("ExeMgr1", "ExecQueueSize");
if (!execQueueSize.empty())
{
sysConfigNew->setConfig("ExeMgr1", "ExecQueueSize", execQueueSize);
}
}
catch (...)
{
}
// PrimProc optional parameters
// Max percent of total memory used by everything before we kill the current query
// For 5.6.1, this setting uses the same mechanism that ExeMgr uses to kill itself
try
{
string maxPct;
maxPct = sysConfigOld->getConfig("PrimitiveServers", "MaxPct");
if (!maxPct.empty())
{
sysConfigNew->setConfig("PrimitiveServers", "MaxPct", maxPct);
}
}
catch (...)
{
}
// Write out Updated System Configuration File
sysConfigNew->write();
}