#!/bin/bash
set -v
set -x

export try=${1:-1}
export format=${2:-STATEMENT}

export sysbench_options="--db-driver=mysql --mysql-user=root --mysql-password=mysql --test=oltp --mysql-table-engine=innodb \
            --mysql-socket=/tmp/oltp_master.sock  \
            --num-threads=50 \
            --oltp-table-size=$(( 20000000 / ${try} ))  --oltp-range-size=0   \
            --oltp-point-selects=0  --oltp-simple-ranges=0 --oltp-sum-ranges=0    --oltp-order-ranges=0 \
            --oltp-distinct-ranges=0   --oltp-connect-delay=0   \
            --oltp-nontrx-mode=update_key"

mysql -u root -pmysql -S /tmp/oltp_master.sock -e "set global binlog_format=${format}";
mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "START SLAVE";

for a in `seq ${try}`; do
   un=oltp$a;
   mysql -u root -pmysql -S /tmp/oltp_master.sock -e "drop database $un" || true;
   mysql -u root -pmysql -S /tmp/oltp_master.sock -e "create database $un";
   sysbench ${sysbench_options}  --mysql-db=$un --oltp-table-name=$un   prepare &
done

while [ 1 ]; do
   mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "SELECT SLEEP(1);SHOW SLAVE STATUS\G" 2>&1 | grep 'Seconds_Behind_Master: 0' && break
done

# wait until caught up
mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "STOP SLAVE SQL_THREAD"

#for ms in master slave; do
#    perf record -g -o ${ms}-${format}-${try}.perf -p `cat /tmp/${ms}.pid` &
#done

echo -n "start: "
date >> master-${format}-${try}
for a in `seq ${try}`; do
   export un=oltp$a
   ( sysbench ${sysbench_options}  --mysql-db=$un --oltp-table-name=$un  run \
           | tee -a oltp-run-${format}-${a}-${try}.sysbench;
   echo "end $a `date`" >> master-${format}-${try}  ) &
done 2>&1 | tee oltp-run-${format}-${try}.log
wait

echo -n "end: "
date >> master-${format}-${try}

date >> slave-${format}-${try}
mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "START SLAVE SQL_THREAD; SELECT NOW();" >> slave-${format}-${try}
while [ 1 ]; do
   mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "SELECT SLEEP(0.5);SHOW SLAVE STATUS\G" 2>&1 | grep 'Seconds_Behind_Master: 0' && break
done
date >> slave-${format}-${try}
mysql -u root -pmysql -S /tmp/oltp_slave.sock -e "START SLAVE SQL_THREAD; SELECT NOW();" >> slave-${format}-${try}
