1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00
Files
mariadb-AlanMologorsky a079a2c944 MCOL-5496: Merge CMAPI code to engine repo.
[add] cmapi code to engine
2023-06-07 10:00:16 +03:00

270 lines
9.0 KiB
Bash
Executable File

#!/bin/bash
# TODO: remove in next releases
programname=$0
function usage {
echo "usage: $programname op [service_name] [is_primary]"
echo " op - operation name [start|stop]"
echo " service_name - [mcs-controllernode|mcs-workernode etc]"
echo " is_primary - [0|1]"
exit 1
}
operation=$1
service_name=$2
is_primary=$3
if [[ -z "$operation" || -z "$service_name" || $is_primary -ne 0 && $is_primary -ne 1 ]]; then
usage
fi
LOG_FILE=/var/log/mariadb/columnstore/container-sh.log
start_up_to_workernode() {
# Set Variables
IFLAG=/etc/columnstore/container-initialized
LOG_PREFIX=/var/log/mariadb/columnstore
MCS_INSTALL_PATH=/var/lib/columnstore
MCS_INSTALL_BIN=/usr/bin
PROGS='StorageManager mcs-loadbrm.py workernode'
JEMALLOC_PATH=$(ldconfig -p | grep -m1 libjemalloc | awk '{print $1}')
if [ -z "$JEMALLOC_PATH" && -f $MCS_INSTALL_PATH/libjemalloc.so.2 ]; then
JEMALLOC_PATH=$MCS_INSTALL_PATH/libjemalloc.so.2
fi
export LD_PRELOAD=$JEMALLOC_PATH
# Intialize Container If Necessary
if [ ! -e $IFLAG ]; then
$MCS_INSTALL_BIN/columnstore-init &>> $LOG_PREFIX/columnstore-init.log
fi
# Verify All Programs Are Available
for i in $PROGS ; do
if [ ! -x $MCS_INSTALL_BIN/$i ] ; then
echo "$i doesn't exist."
exit 1
fi
done
# Start System
echo `date`: start_up_to_workernode\(\)... >> $LOG_FILE
touch $LOG_PREFIX/storagemanager.log && chmod 666 $LOG_PREFIX/storagemanager.log
$MCS_INSTALL_BIN/StorageManager &>> $LOG_PREFIX/storagemanager.log &
echo `date`: StorageManager PID = $! >> $LOG_FILE
sleep 1
echo `date`: loading BRM >> $LOG_FILE
touch $LOG_PREFIX/mcs-loadbrm.log && chmod 666 $LOG_PREFIX/mcs-loadbrm.log
# Argument "no" here means don't use systemd to start SM
$MCS_INSTALL_BIN/mcs-loadbrm.py no >> $LOG_PREFIX/mcs-loadbrm.log 2>&1
touch $LOG_PREFIX/workernode.log && chmod 666 $LOG_PREFIX/workernode.log
$MCS_INSTALL_BIN/workernode DBRM_Worker1 &>> $LOG_PREFIX/workernode.log &
echo `date`: workernode PID = $! >> $LOG_FILE
exit 0
}
start_those_left_at_master() {
# Set Variables
LOG_PREFIX=/var/log/mariadb/columnstore
MCS_INSTALL_PATH=/var/lib/columnstore
MCS_INSTALL_BIN=/usr/bin
# TODO: remove fast fix
# skip check binary for ExeMgr
PROGS='controllernode PrimProc WriteEngineServer DMLProc DDLProc'
JEMALLOC_PATH=$(ldconfig -p | grep -m1 libjemalloc | awk '{print $1}')
if [ -z "$JEMALLOC_PATH" && -f $MCS_INSTALL_PATH/libjemalloc.so.2 ]; then
JEMALLOC_PATH=$MCS_INSTALL_PATH/libjemalloc.so.2
fi
export LD_PRELOAD=$JEMALLOC_PATH
# Verify All Programs Are Available (except ExeMgr)
for i in $PROGS ; do
if [ ! -x $MCS_INSTALL_BIN/$i ] ; then
echo "$i doesn't exist."
exit 1
fi
done
echo `date`: start_those_left_at_master\(\) >> $LOG_FILE
if [[ $is_primary -eq 1 ]]; then
touch $LOG_PREFIX/controllernode.log && chmod 666 $LOG_PREFIX/controllernode.log
$MCS_INSTALL_BIN/controllernode fg &>> $LOG_PREFIX/controllernode.log &
echo `date`: controllernode PID = $! >> $LOG_FILE
fi
touch $LOG_PREFIX/primproc.log && chmod 666 $LOG_PREFIX/primproc.log
$MCS_INSTALL_BIN/PrimProc &>> $LOG_PREFIX/primproc.log &
echo `date`: PrimProc PID = $! >> $LOG_FILE
sleep 1
if [ -e $MCS_INSTALL_BIN/ExeMgr ] ; then
touch $LOG_PREFIX/exemgr.log && chmod 666 $LOG_PREFIX/exemgr.log
$MCS_INSTALL_BIN/ExeMgr &>> $LOG_PREFIX/exemgr.log &
echo `date`: ExeMgr PID = $! >> $LOG_FILE
fi
touch $LOG_PREFIX/writeengineserver.log && chmod 666 $LOG_PREFIX/writeengineserver.log
$MCS_INSTALL_BIN/WriteEngineServer &>> $LOG_PREFIX/writeengineserver.log &
echo `date`: WriteEngineServer PID = $! >> $LOG_FILE
sleep 3
touch $LOG_PREFIX/dmlproc.log && chmod 666 $LOG_PREFIX/dmlproc.log
$MCS_INSTALL_BIN/DMLProc &>> $LOG_PREFIX/dmlproc.log &
echo `date`: DMLProc PID = $! >> $LOG_FILE
touch $LOG_PREFIX/ddlproc.log && chmod 666 $LOG_PREFIX/ddlproc.log
$MCS_INSTALL_BIN/DDLProc &>> $LOG_PREFIX/ddlproc.log &
echo `date`: DDLProc PID = $! >> $LOG_FILE
exit 0
}
start() {
# Set Variables
IFLAG=/etc/columnstore/container-initialized
LOG_PREFIX=/var/log/mariadb/columnstore
MCS_INSTALL_PATH=/var/lib/columnstore
MCS_INSTALL_BIN=/usr/bin
# TODO: remove fast fix
# skip check binary for ExeMgr
PROGS='StorageManager load_brm workernode controllernode PrimProc WriteEngineServer DMLProc DDLProc'
JEMALLOC_PATH=$(ldconfig -p | grep -m1 libjemalloc | awk '{print $1}')
if [ -z "$JEMALLOC_PATH" && -f $MCS_INSTALL_PATH/libjemalloc.so.2 ]; then
JEMALLOC_PATH=$MCS_INSTALL_PATH/libjemalloc.so.2
fi
export LD_PRELOAD=$JEMALLOC_PATH
# Intialize Container If Necessary
if [ ! -e $IFLAG ]; then
$MCS_INSTALL_BIN/columnstore-init &>> $LOG_PREFIX/columnstore-init.log
fi
# Verify All Programs Are Available (except ExeMgr)
for i in $PROGS ; do
if [ ! -x $MCS_INSTALL_BIN/$i ] ; then
echo "$i doesn't exist."
exit 1
fi
done
# Start System
echo `date`: start\(\)... >> $LOG_FILE
touch $LOG_PREFIX/storagemanager.log && chmod 666 $LOG_PREFIX/storagemanager.log
$MCS_INSTALL_BIN/StorageManager &>> $LOG_PREFIX/storagemanager.log &
echo `date`: StorageManager PID = $! >> $LOG_FILE
sleep 1
echo `date`: loading BRM >> $LOG_FILE
touch $LOG_PREFIX/mcs-loadbrm.log && chmod 666 $LOG_PREFIX/mcs-loadbrm.log
# Argument "no" here means don't use systemd to start SM
$MCS_INSTALL_BIN/mcs-loadbrm.py no >> $LOG_PREFIX/mcs-loadbrm.log 2>&1
touch $LOG_PREFIX/workernode.log && chmod 666 $LOG_PREFIX/workernode.log
$MCS_INSTALL_BIN/workernode DBRM_Worker2 &>> $LOG_PREFIX/workernode.log &
echo `date`: workernode PID = $! >> $LOG_FILE
sleep 2
if [[ $is_primary -eq 1 ]]; then
touch $LOG_PREFIX/controllernode.log && chmod 666 $LOG_PREFIX/controllernode.log
$MCS_INSTALL_BIN/controllernode fg &>> $LOG_PREFIX/controllernode.log &
echo `date`: controllernode PID = $! >> $LOG_FILE
fi
touch $LOG_PREFIX/primproc.log && chmod 666 $LOG_PREFIX/primproc.log
$MCS_INSTALL_BIN/PrimProc &>> $LOG_PREFIX/primproc.log &
echo `date`: PrimProc PID = $! >> $LOG_FILE
sleep 1
if [ -e $MCS_INSTALL_BIN/ExeMgr ] ; then
touch $LOG_PREFIX/exemgr.log && chmod 666 $LOG_PREFIX/exemgr.log
$MCS_INSTALL_BIN/ExeMgr &>> $LOG_PREFIX/exemgr.log &
echo `date`: ExeMgr PID = $! >> $LOG_FILE
fi
touch $LOG_PREFIX/writeengineserver.log && chmod 666 $LOG_PREFIX/writeengineserver.log
$MCS_INSTALL_BIN/WriteEngineServer &>> $LOG_PREFIX/writeengineserver.log &
echo `date`: WriteEngineServer PID = $! >> $LOG_FILE
sleep 3
if [[ $is_primary -eq 1 ]]; then
touch $LOG_PREFIX/dmlproc.log && chmod 666 $LOG_PREFIX/dmlproc.log
$MCS_INSTALL_BIN/DMLProc &>> $LOG_PREFIX/dmlproc.log &
echo `date`: DMLProc PID = $! >> $LOG_FILE
touch $LOG_PREFIX/ddlproc.log && chmod 666 $LOG_PREFIX/ddlproc.log
$MCS_INSTALL_BIN/DDLProc &>> $LOG_PREFIX/ddlproc.log &
echo `date`: DDLProc PID = $! >> $LOG_FILE
fi
exit 0
}
stop() {
# TODO: remove fast fix
# skip check binary for ExeMgr
PROGS='DMLProc DDLProc WriteEngineServer PrimProc workernode controllernode StorageManager'
MCS_INSTALL_BIN=/usr/bin
LOG_PREFIX=/var/log/mariadb/columnstore
# Stop System
echo `date`: Stopping... >> $LOG_FILE
if [[ ! -z "$(pidof $PROGS)" ]]; then
# Save BRM only on the primary node now.
if [[ ! -z "$(pidof controllernode)" ]]; then
$MCS_INSTALL_BIN/mcs-savebrm.py &>> $LOG_PREFIX/savebrm.log 2>&1
fi
echo `date`: Sending SIGTERM >> $LOG_FILE
kill $(pidof $PROGS) > /dev/null
sleep 3
# Make sure StorageManager had a chance to shutdown clean
counter=1
while [ -n "$(pidof StorageManager)" -a $counter -le 60 ]
do
sleep 1
((counter++))
done
echo `date`: Sending SIGKILL >> $LOG_FILE
kill -9 $(pidof $PROGS) > /dev/null
fi
echo `date`: Clearing SHM >> $LOG_FILE
$MCS_INSTALL_BIN/clearShm
exit 0
}
case "$operation" in
'start')
# We start everything when controllernode starts at primary node and with workernode at non-primary
if [[ $is_primary -eq 1 && "mcs-workernode" == "$service_name" ]]; then
start_up_to_workernode $is_primary
elif [[ $is_primary -eq 1 && "mcs-controllernode" == "$service_name" ]]; then
start_those_left_at_master $is_primary
elif [[ $is_primary -eq 0 && "mcs-workernode" == "$service_name" ]]; then
start $is_primary
fi
;;
'stop')
if [[ $is_primary -eq 1 && "mcs-controllernode" == "$service_name" || $is_primary -eq 0 && "mcs-workernode" == "$service_name" ]]; then
stop
fi
;;
esac