You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			2035 lines
		
	
	
		
			52 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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();
 | 
						|
}
 |