#!/bin/bash

set -exu
set -o errexit

#PREFIX=/home/gsmol/task/13_devel
PREFIX=/home/gsmol/task/14
ARCHIVE_DIR=${PREFIX}/archive
PGDATA_NODE1=${PREFIX}/node1
PGDATA_NODE2=${PREFIX}/node2
PORT1=15432
PORT2=15433
ARCHIVE_COMMAND="cp %p ${ARCHIVE_DIR}/"

${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_NODE1} || echo "all is well"
${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_NODE2} || echo "all is well"
rm -rf ${PGDATA_NODE1} ${PGDATA_NODE2} ${ARCHIVE_DIR}

mkdir -p ${ARCHIVE_DIR}

# create master
${PREFIX}/bin/initdb -k -D ${PGDATA_NODE1}
echo "port = ${PORT1}" >> ${PGDATA_NODE1}/postgresql.auto.conf
echo "wal_level = logical" >> ${PGDATA_NODE1}/postgresql.auto.conf

# start cluster
${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE1}

# setup replica
${PREFIX}/bin/pg_basebackup -X stream -p ${PORT1} -D ${PGDATA_NODE2} -R
echo "port = ${PORT2}" >> ${PGDATA_NODE2}/postgresql.auto.conf
echo "archive_mode = always" >> ${PGDATA_NODE2}/postgresql.auto.conf
echo "archive_command = '${ARCHIVE_COMMAND}'" >> ${PGDATA_NODE2}/postgresql.auto.conf

# start replica
${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE2}

# generate some data
${PREFIX}/bin/pgbench -i -s 5 -p ${PORT1} postgres

# first switchover
${PREFIX}/bin/pg_ctl stop -D ${PGDATA_NODE1}
${PREFIX}/bin/pg_ctl promote -D ${PGDATA_NODE2}

# setup old master as replica
touch ${PGDATA_NODE1}/standby.signal
echo "primary_conninfo = 'port=${PORT2}'" >> ${PGDATA_NODE1}/postgresql.auto.conf
${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE1}

# generate some more data
${PREFIX}/bin/pgbench -i -s 5 -p ${PORT2} postgres

# second switchover
${PREFIX}/bin/pg_ctl stop -D ${PGDATA_NODE2}
${PREFIX}/bin/pg_ctl promote -D ${PGDATA_NODE1}

# setup previous master again as replica
touch ${PGDATA_NODE2}/standby.signal
${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE2}

sleep 5

test -f ${ARCHIVE_DIR}/00000003.history || { echo "00000003.history is missing" ; exit 1 ;}

echo "00000003.history exists"
exit 0
