diff --git a/oam/install_scripts/CMakeLists.txt b/oam/install_scripts/CMakeLists.txt index 361cf6f7b..3e6b7762a 100644 --- a/oam/install_scripts/CMakeLists.txt +++ b/oam/install_scripts/CMakeLists.txt @@ -20,6 +20,7 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-writeengineserver.service.in" "$ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-dmlproc.service.in" "${CMAKE_CURRENT_SOURCE_DIR}/mcs-dmlproc.service" @ONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-ddlproc.service.in" "${CMAKE_CURRENT_SOURCE_DIR}/mcs-ddlproc.service" @ONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-loadbrm.service.in" "${CMAKE_CURRENT_SOURCE_DIR}/mcs-loadbrm.service" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-storagemanager.service.in" "${CMAKE_CURRENT_SOURCE_DIR}/mcs-storagemanager.service" @ONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mcs-stop-controllernode.sh.in" "${CMAKE_CURRENT_SOURCE_DIR}/mcs-stop-controllernode.sh" @ONLY) install(PROGRAMS columnstore-post-install @@ -44,6 +45,8 @@ install(PROGRAMS columnstore-post-install mariadb-command-line.sh mcs_module_installer.sh mcs-stop-controllernode.sh + mcs-loadbrm.py + mcs-start-storagemanager.py DESTINATION ${ENGINE_BINDIR} COMPONENT columnstore-engine) install(FILES mariadb-columnstore.service @@ -62,6 +65,7 @@ install(FILES mariadb-columnstore.service mcs-dmlproc.service mcs-ddlproc.service mcs-loadbrm.service + mcs-storagemanager.service DESTINATION ${ENGINE_SUPPORTDIR} COMPONENT columnstore-engine) install(FILES module DESTINATION ${ENGINE_DATADIR}/local COMPONENT columnstore-engine) diff --git a/oam/install_scripts/columnstore-post-install.in b/oam/install_scripts/columnstore-post-install.in index 72969eaff..7d522d1f1 100755 --- a/oam/install_scripts/columnstore-post-install.in +++ b/oam/install_scripts/columnstore-post-install.in @@ -105,6 +105,9 @@ if [ $user = "root" ]; then cp @ENGINE_SUPPORTDIR@/mcs-writeengineserver.service /lib/systemd/system/. >/dev/null 2>&1 cp @ENGINE_SUPPORTDIR@/mcs-loadbrm.service /usr/lib/systemd/system/. >/dev/null 2>&1 cp @ENGINE_SUPPORTDIR@/mcs-loadbrm.service /lib/systemd/system/. >/dev/null 2>&1 + cp @ENGINE_SUPPORTDIR@/mcs-storagemanager.service /usr/lib/systemd/system/. >/dev/null 2>&1 + cp @ENGINE_SUPPORTDIR@/mcs-storagemanager.service /lib/systemd/system/. >/dev/null 2>&1 + systemctl enable mariadb-columnstore >/dev/null 2>&1 systemctl enable mcs-controllernode > /dev/null 2>&1 @@ -115,6 +118,7 @@ if [ $user = "root" ]; then systemctl enable mcs-workernode > /dev/null 2>&1 systemctl enable mcs-writeengineserver > /dev/null 2>&1 systemctl enable mcs-loadbrm > /dev/null 2>&1 + systemctl enable mcs-storagemanager > /dev/null 2>&1 else chkconfig=`which chkconfig 2>/dev/null` if [ -n "$chkconfig" ]; then diff --git a/oam/install_scripts/columnstore-pre-uninstall.in b/oam/install_scripts/columnstore-pre-uninstall.in index 4b8aa2e6b..ae6b88690 100755 --- a/oam/install_scripts/columnstore-pre-uninstall.in +++ b/oam/install_scripts/columnstore-pre-uninstall.in @@ -17,7 +17,7 @@ systemctl cat mariadb-columnstore.service > /dev/null 2>&1 if [ $? -eq 0 ] && [ $(running_systemd) -eq 0 ]; then systemctl stop mariadb-columnstore >/dev/null 2>&1 else - PROGS='load_brm workernode controllernode PrimProc ExeMgr DMLProc DDLProc WriteEngineServer' + PROGS='StorageManager workernode controllernode PrimProc ExeMgr DMLProc DDLProc WriteEngineServer' kill $(pidof $PROGS) > /dev/null sleep 3 kill -9 $(pidof $PROGS) > /dev/null @@ -70,6 +70,7 @@ if [ -n "$systemctl" ] && [ $(running_systemd) -eq 0 ]; then systemctl disable mcs-workernode > /dev/null 2>&1 systemctl disable mcs-writeengineserver > /dev/null 2>&1 systemctl disable mcs-loadbrm > /dev/null 2>&1 + systemctl disable mcs-storagemanager > /dev/null 2>&1 rm -f /usr/lib/systemd/system/mariadb-columnstore.service rm -f /lib/systemd/system/mariadb-columnstore.service @@ -89,6 +90,9 @@ if [ -n "$systemctl" ] && [ $(running_systemd) -eq 0 ]; then rm -f /lib/systemd/system/mcs-writeengineserver.service rm -f /usr/lib/systemd/system/mcs-loadbrm.service rm -f /lib/systemd/system/mcs-loadbrm.service + rm -f /usr/lib/systemd/system/mcs-storagemanager.service + rm -f /lib/systemd/system/mcs-storagemanager.service + systemctl daemon-reload else chkconfig=`which chkconfig 2>/dev/null` diff --git a/oam/install_scripts/mcs-loadbrm.py b/oam/install_scripts/mcs-loadbrm.py new file mode 100644 index 000000000..e8b138802 --- /dev/null +++ b/oam/install_scripts/mcs-loadbrm.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import configparser +import subprocess + +config = configparser.ConfigParser() +config.read('/etc/columnstore/storagemanager.cnf') + +storage = config['ObjectStorage']['service'] +region = config['S3']['region'] +bucket = config['S3']['bucket'] +loadbrm = '/usr/bin/load_brm /var/lib/columnstore/data1/systemFiles/dbrm/{0}' +brm_saves_current = '' + +if storage.lower() == 's3' and not region.lower() == 'some_region' and not bucket.lower == 'some_bucket': + # load s3 + brm = 'data1/systemFiles/dbrm/BRM_saves_current' + + try: + brm_saves_current = subprocess.check_output(['smcat', brm]) + except subprocess.CalledProcessError as e: + # will happen when brm file does not exist + pass +else: + import xml.etree.ElementTree as ET + tree = ET.parse('/etc/columnstore/Columnstore.xml') + root = tree.getroot() + pmCount = int(root.find("./SystemModuleConfig/ModuleCount3").text) + brm = '/var/lib/columnstore/data1/systemFiles/dbrm/BRM_saves_current' + + if pmCount > 1: + # load multinode dbrm + try: + brm_saves_current = subprocess.check_output(['cat', brm]) + + if not brm_saves_current: + # local dbrm empty, need to pull from main node + pass + except subprocess.CalledProcessError as e: + # will happen when brm file does not exist + pass + else: + # load local dbrm + try: + brm_saves_current = subprocess.check_output(['cat', brm]) + except subprocess.CalledProcessError as e: + # will happen when brm file does not exist + pass + +if brm_saves_current: + cmd = loadbrm.format(brm_saves_current.decode('utf-8')) + try: + retcode = subprocess.call(cmd, shell=True) + if retcode < 0: + #print("Child was terminated by signal", -retcode, file=sys.stderr) + pass + + except OSError as e: + #print("Execution failed:", e, file=sys.stderr) + pass diff --git a/oam/install_scripts/mcs-loadbrm.service.in b/oam/install_scripts/mcs-loadbrm.service.in index d9a634287..da58c9d78 100644 --- a/oam/install_scripts/mcs-loadbrm.service.in +++ b/oam/install_scripts/mcs-loadbrm.service.in @@ -2,12 +2,11 @@ Description=loadbrm PartOf=mcs-workernode.service Before=mcs-workernode.service -ConditionPathExists=/var/lib/columnstore/data1/systemFiles/dbrm/BRM_saves_current [Service] Type=simple Environment="SKIP_OAM_INIT=1" -ExecStart=/usr/bin/env bash -c "/usr/bin/load_brm /var/lib/columnstore/data1/systemFiles/dbrm/$(cat /var/lib/columnstore/data1/systemFiles/dbrm/BRM_saves_current)" +ExecStart=@ENGINE_BINDIR@/mcs-loadbrm.py [Install] WantedBy=mariadb-columnstore.service diff --git a/oam/install_scripts/mcs-start-storagemanager.py b/oam/install_scripts/mcs-start-storagemanager.py new file mode 100644 index 000000000..689a5922e --- /dev/null +++ b/oam/install_scripts/mcs-start-storagemanager.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +import configparser +import sys + +config = configparser.ConfigParser() +config.read('/etc/columnstore/storagemanager.cnf') + +storage = config['ObjectStorage']['service'] +region = config['S3']['region'] +bucket = config['S3']['bucket'] + +if storage.lower() == 's3' and not region.lower() == 'some_region' and not bucket.lower == 'some_bucket': + sys.exit(0) +sys.exit(1) diff --git a/oam/install_scripts/mcs-storagemanager.service.in b/oam/install_scripts/mcs-storagemanager.service.in new file mode 100644 index 000000000..297d89687 --- /dev/null +++ b/oam/install_scripts/mcs-storagemanager.service.in @@ -0,0 +1,16 @@ +[Unit] +Description=storagemanager +PartOf=mcs-workernode.service +Before=mcs-workernode.service +ConditionPathExists=/etc/columnstore/storagemanager.cnf +# FailureAction="exit" +# FailureActionExitStatus=0 + +[Service] +Type=simple +ExecStartPre=@ENGINE_BINDIR@/mcs-start-storagemanager.py +ExecStart=/usr/bin/env bash -c "LD_PRELOAD=$(ldconfig -p | grep -m1 libjemalloc | awk '{print $1}') exec @ENGINE_BINDIR@/StorageManager" + +[Install] +WantedBy=mariadb-columnstore.service +WantedBy=mcs-workernode.service