#!/bin/bash
# This script installs mariadb and leaves it ready for benchmarking
P=mariadbbuild-bench
DEFAULT_VERSION=10.2.14
. $SHELLPACK_INCLUDE/common.sh
TIME_CMD=`which time`
if [ "$TIME_CMD" = "" ]; then
        TIMEFORMAT="%2Uuser %2Ssystem %Relapsed %P%%CPU"
        TIME_CMD="time"
fi
MARIADB_USER=nobody
MARIADB_GROUP=nogroup
MARIADB_ADMIN_USER=root
MARIADB_ADMIN_PASSWORD=mmtests-default

# Basic argument parser
TASKSET_SERVER=
TASKSET_CLIENT=
SERVERSIDE_COMMAND=none
SERVERSIDE_NAME=`date +%Y%m%d-%H%M-%S`

while [ "$1" != "" ]; do
	case "$1" in
	-v)
		VERSION=$2
		shift 2
		;;
	--serverside-command)
		SERVERSIDE_COMMAND=$2
		shift 2
		;;
	--serverside-name)
		SERVERSIDE_NAME=$2
		shift 2
		;;
	--install-only)
		INSTALL_ONLY=yes
		shift
		;;
	--install-force)
		INSTALL_FORCE=yes
		shift
		;;
	--mariadb-user)
		MARIADB_USER=$2
		shift 2
		;;
	--effective_cachesize)
		IGNORED_A=$2
		shift 2
		;;
	--work_mem)
		IGNORED_B=$2
		shift 2
		;;
	--shared_buffers)
		SHARED_BUFFERS=$2
		shift 2
		;;
	--start)
		SERVER_START=yes
		shift
		;;
	--start_opts)
		MARIADB_START_OPTS=$2
		shift 2
		;;
	--stop)
		SERVER_STOP=yes
		shift
		;;
	*)
		echo Unrecognised option: $1
		shift
	esac
done
if [ "$TASKSET_SERVER" != "" ]; then
	echo TASKSET_SERVER: $TASKSET_SERVER
	echo TASKSET_CLIENT: $TASKSET_CLIENT
fi
if [ -z "$VERSION" ]; then
	VERSION=$DEFAULT_VERSION
fi

if [ "$INSTALL_FORCE" = "yes" ]; then
	rm -rf $SHELLPACK_SOURCES/mariadbbuild-${VERSION}
fi
if [ ! -d $SHELLPACK_SOURCES/mariadbbuild-${VERSION}-installed ]; then
	mmtests_activity source-install
	$SHELLPACK_INCLUDE/shellpack-install-mariadbbuild -v ${VERSION}  || die mariadbbuild install script returned error
	mmtests_activity source-installed
fi
cd $SHELLPACK_SOURCES/mariadbbuild-${VERSION}-installed || die Failed to cd to mariadbbuild install directory
. $SHELLPACK_INCLUDE/include-libhugetlbfs.sh
. $SHELLPACK_INCLUDE/include-hugepage.sh
getpagesize

MARIADB_DATADIR=$SHELLPACK_DATA/dbdata
MARIADB_PIDFILE=$MARIADB_DATADIR/mariadbd.pid
MARIADB_PID=`cat $MARIADB_PIDFILE 2>&1`
MYSQLADMIN="bin/mysqladmin -u $MARIADB_ADMIN_USER -p$MARIADB_ADMIN_PASSWORD"
cd $SHELLPACK_SOURCES/mariadbbuild-${VERSION}-installed

# Only updates the first occurance of the parameter
update_entry_cnf() {
	PARAMETER=$1
	VALUE=$2
	MARIADB_CONF=/etc/my.cnf

	LINE=`grep -n "^$PARAMETER" $MARIADB_CONF | cut -d: -f1 | head -1`
	if [ "$LINE" = "" ]; then
		LINE=`grep -n "^#$PARAMETER" $MARIADB_CONF | cut -d: -f1 | head -1`
		if [ "$LINE" = "" ]; then
			die Failed to locate parameter $PARAMETER
		fi
	fi
	LINEC=`wc -l $MARIADB_CONF | awk '{print $1}'`
	head -$(($LINE-1)) $MARIADB_CONF > ${MARIADB_CONF}.tmp
	echo $PARAMETER = $VALUE >> ${MARIADB_CONF}.tmp
	tail -$(($LINEC-$LINE)) $MARIADB_CONF >> ${MARIADB_CONF}.tmp

	mv ${MARIADB_CONF}.tmp $MARIADB_CONF
}

mariadb_shutdown() {
	if [ -e $MARIADB_PIDFILE ]; then
		echo Shutting down server
		eval $MYSQLADMIN shutdown
		wait_on_pid_exit $MARIADB_PID
		rm $MARIADB_PIDFILE 2>/dev/null
	fi
}

if [ "$SERVER_STOP" = "yes" ]; then
	mariadb_shutdown
fi

if [ "$SERVER_START" = "yes" ]; then
	mariadb_shutdown

	# Configure group parameters
	echo $SHARED_BUFFERS > /proc/sys/kernel/shmmax
	echo $(($SHARED_BUFFERS*2/4096)) > /proc/sys/kernel/shmall
	ulimit -l $SHARED_BUFFERS
	GROUPNAME=`groups $MARIADB_USER | awk '{print $3}'`
	if [ "$GROUPNAME" = "" ]; then
		GROUPNAME=`groups $MARIADB_USER`
	fi
	GROUPID=`grep ^$GROUPNAME: /etc/group | cut -d: -f3`
	echo $GROUPID > /proc/sys/vm/hugetlb_shm_group

	# Update the memory configurations
	update_entry_cnf key_buffer_size $SHARED_BUFFERS

	# Configure shmem parameters
	echo $SHARED_BUFFERS > /proc/sys/kernel/shmmax
	echo $(($SHARED_BUFFERS*2/$PAGESIZE)) > /proc/sys/kernel/shmall
	ulimit -l $SHARED_BUFFERS

	IFS=',' read -a INITARR <<< "$MARIADB_START_OPTS"
	for OP in ${INITARR[@]}
	do
	    START_STR+="$OP "
	done
	echo Starting mariadb: $START_STR
	echo o key_buffer_size buffers $SHARED_BUFFERS

	./support-files/mysql.server start --datadir=$MARIADB_DATADIR --pid-file=$MARIADB_PIDFILE $START_STR
	wait_on_pid_file $MARIADB_PIDFILE
	MARIADB_PID=`cat $MARIADB_PIDFILE 2>&1`
	./bin/mysqladmin -u $MARIADB_ADMIN_USER password $MARIADB_ADMIN_PASSWORD
fi

echo mariadb operation successful
exit $SHELLPACK_SUCCESS
#### Description mariadbbuild
#### Details mariadbbuild-bench 49
