You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
270 lines
9.0 KiB
Bash
Executable File
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
|