#!/bin/bash

export LANG=C

set -x

PGPATH=/home/euler/pglr-row-filter-v13/bin
PGDATA1=/tmp/pgdata1
PGDATA2=/tmp/pgdata2
PGPORT1=9988
PGPORT2=9977
PGDATABASE=postgres

PGSCALEFACTOR=5
PGCLIENTS=`expr $PGSCALEFACTOR - 2`
PGTESTDURATION=10

if [ -f $PGDATA1/postmaster.pid ]; then
	$PGPATH/pg_ctl stop -D $PGDATA1
fi

if [ -f $PGDATA2/postmaster.pid ]; then
	$PGPATH/pg_ctl stop -D $PGDATA2
fi

rm -rf $PGDATA1
rm -rf $PGDATA2

$PGPATH/initdb -D $PGDATA1
$PGPATH/initdb -D $PGDATA2

echo "wal_level = logical" >> $PGDATA1/postgresql.conf
echo "max_wal_size = 5GB" >> $PGDATA1/postgresql.conf
echo "logging_collector = on" >> $PGDATA1/postgresql.conf
echo "log_filename = 'postgresql.log'" >> $PGDATA1/postgresql.conf
echo "log_min_messages = debug2" >> $PGDATA1/postgresql.conf
echo "port = $PGPORT1" >> $PGDATA1/postgresql.conf
#echo "log_statement = all" >> $PGDATA1/postgresql.conf
echo "log_replication_commands = on" >> $PGDATA1/postgresql.conf

echo "wal_level = logical" >> $PGDATA2/postgresql.conf
echo "max_wal_size = 5GB" >> $PGDATA2/postgresql.conf
echo "logging_collector = on" >> $PGDATA2/postgresql.conf
echo "log_filename = 'postgresql.log'" >> $PGDATA2/postgresql.conf
echo "port = $PGPORT2" >> $PGDATA2/postgresql.conf
#echo "log_statement = all" >> $PGDATA2/postgresql.conf
echo "log_replication_commands = on" >> $PGDATA2/postgresql.conf

$PGPATH/pg_ctl start -w -D $PGDATA1
$PGPATH/pg_ctl start -w -D $PGDATA2

$PGPATH/pgbench -i -s $PGSCALEFACTOR -p $PGPORT1 $PGDATABASE

# add primary key to pgbench_history
$PGPATH/psql -X -c "BEGIN; ALTER TABLE pgbench_history ADD COLUMN id serial; UPDATE pgbench_history SET id = nextval('pgbench_history_id_seq'); ALTER TABLE pgbench_history ADD PRIMARY KEY(id); COMMIT;" -p $PGPORT1 $PGDATABASE

#$PGPATH/pg_dump -s -p $PGPORT1 $PGDATABASE | $PGPATH/psql -f - -p $PGPORT2 $PGDATABASE
$PGPATH/pg_dump --no-publications -p $PGPORT1 $PGDATABASE | $PGPATH/psql -f - -p $PGPORT2 $PGDATABASE

$PGPATH/psql -X -c "CREATE PUBLICATION pub_bench FOR TABLE pgbench_accounts WHERE (aid > 0), pgbench_branches, pgbench_tellers, pgbench_history" -p $PGPORT1 $PGDATABASE

$PGPATH/psql -X -c "CREATE SUBSCRIPTION sub_bench CONNECTION 'port=$PGPORT1 dbname=$PGDATABASE' PUBLICATION pub_bench" -p $PGPORT2 $PGDATABASE

$PGPATH/pgbench -T $PGTESTDURATION -c $PGCLIENTS -p $PGPORT1 $PGDATABASE

$PGPATH/psql -X -c "SELECT pg_current_wal_lsn() <= write_lsn AND state = 'streaming' FROM pg_catalog.pg_stat_replication WHERE application_name = 'sub1'" -p $PGPORT1 $PGDATABASE
sleep 2
$PGPATH/psql -X -c "SELECT pg_current_wal_lsn() <= write_lsn AND state = 'streaming' FROM pg_catalog.pg_stat_replication WHERE application_name = 'sub1'" -p $PGPORT1 $PGDATABASE
sleep 2
$PGPATH/psql -X -c "SELECT pg_current_wal_lsn() <= write_lsn AND state = 'streaming' FROM pg_catalog.pg_stat_replication WHERE application_name = 'sub1'" -p $PGPORT1 $PGDATABASE

$PGPATH/pg_ctl stop -D $PGDATA1
$PGPATH/pg_ctl stop -D $PGDATA2

grep ERROR $PGDATA2/log/postgresql.log
grep 'Broken pipe' $PGDATA2/log/postgresql.log
