#!/bin/bash

set -exu
set -o errexit

PREFIX=/home/gsmol/task/13_devel
PGDATA_PUB=/tmp/200MB/data_pub # created as: mkdir -p /tmp/200MB/ && sudo mount -t tmpfs -o size=200m tmpfs /tmp/200MB
PUB_WAL_DIR=/tmp/wal
PGDATA_SUB=${PREFIX}/data_sub
PORT_PUB=15431
PORT_SUB=15430

${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_PUB} || echo "all is well"
${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_SUB} || echo "all is well"
rm -rf ${PGDATA_PUB} ${PGDATA_SUB} ${PUB_WAL_DIR}

${PREFIX}/bin/initdb -k -D ${PGDATA_PUB} -X ${PUB_WAL_DIR}
echo "port = ${PORT_PUB}" >> ${PGDATA_PUB}/postgresql.auto.conf
echo "wal_level = logical" >> ${PGDATA_PUB}/postgresql.auto.conf
echo "autovacuum = off" >> ${PGDATA_PUB}/postgresql.auto.conf

${PREFIX}/bin/initdb -k -D ${PGDATA_SUB}
echo "port = ${PORT_SUB}" >> ${PGDATA_SUB}/postgresql.auto.conf

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

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

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

# PUBLICATION
${PREFIX}/bin/psql -p ${PORT_PUB} -d postgres -c "CREATE PUBLICATION mypub FOR table pgbench_accounts"

# SUBSCRIPTION
${PREFIX}/bin/psql -p ${PORT_SUB} -d postgres -c "CREATE TABLE pgbench_accounts(aid int not null PRIMARY KEY, bid int,abalance int,filler char(84))"
${PREFIX}/bin/psql -p ${PORT_SUB} -d postgres -c "CREATE SUBSCRIPTION mysub CONNECTION 'host=localhost port=${PORT_PUB} dbname=postgres' PUBLICATION mypub"

# emulate out of space
mkdir ${PGDATA_PUB}/somedir
cp -av ${PUB_WAL_DIR} ${PGDATA_PUB}/somedir || echo "we should get empty state.tmp \
at the next launch of synchronization worker from replica"

