#!/bin/sh

ROOT=`pwd`

# Install some usable contribs
CONTRIBDIR="$(dirname "$ROOT")"/build/contrib
cd $CONTRIBDIR/pg_prewarm/
make -s
make -s install
cd $ROOT

cd $CONTRIBDIR/pg_buffercache/
make -s
make -s install
cd $ROOT

# Set up env
BINDIR=$ROOT/bin
DATADIR="$ROOT/data"
DATADIR_PRIMARY=$DATADIR/primary
DATADIR_SECONDARY=$DATADIR/secondary
LOGSDIR="$DATADIR/logs"

mkdir -p $DATADIR
mkdir -p $LOGSDIR
mkdir -p $DATADIR_PRIMARY
mkdir -p $DATADIR_SECONDARY

chmod 700 -R $DATADIR_SECONDARY

LOGFILE=$LOGSDIR/init-db.log

PORT=55432
SLOT="slot01"

# build primary (master)
$BINDIR/pg_ctl -D$DATADIR_PRIMARY init
$BINDIR/pg_ctl -D$DATADIR_PRIMARY -l$LOGFILE -o"--port=$PORT" start
$BINDIR/psql -p$PORT -dpostgres <<EOF
\t on
select pg_create_physical_replication_slot('$SLOT');
create extension pg_prewarm;
create extension pg_buffercache;
EOF

# build secondary (replica)
$BINDIR/pg_basebackup -p$PORT -D$DATADIR_SECONDARY -S$SLOT -Xstream -vP

cat <<-CONF >> $DATADIR_SECONDARY/postgresql.conf
primary_conninfo = 'port=$PORT'
recovery_target_timeline = 'latest'
primary_slot_name = '$SLOT'
checkpoint_timeout = 5min
max_wal_size = 1GB
min_wal_size = 100MB
hot_standby_feedback = on
CONF

touch $DATADIR_SECONDARY/standby.signal

# all done, stop primary
$BINDIR/pg_ctl -D$DATADIR_PRIMARY stop
