#!/usr/bin/env bash
# Membuktikan divergensi setelah failover: primary lama yang dinyalakan
# kembali TIDAK otomatis tahu bahwa dunia sudah berpindah timeline.
# Ia bangun sebagai primary timeline 1, menerima tulisan, dan kini ada
# dua primary dengan data berbeda — split brain.
# Skrip ini melanjutkan keadaan dari promosi.sh:
# primary lama (54365) mati, primary baru hasil promosi (54366) aktif.
set -eu

PGBIN=/home/z/my-project/tools/dl/pgdeb/usr/lib/postgresql/17/bin
BASE=/home/z/my-project/tmp/rp_failover
PRI=$BASE/pgdata_pusat     # primary lama, port 54365
STD=$BASE/pgdata_cabang    # primary baru (hasil promosi), port 54366
SOCK=$BASE/sock

# Polling: tunggu sampai sebuah query mengembalikan nilai yang diharapkan.
tunggu() {  # port database sql nilai_yang_diharapkan
  local port="$1" db="$2" sql="$3" harapan="$4" i hasil
  for i in $(seq 1 150); do
    hasil=$(psql -X -q -t -A -h 127.0.0.1 -p "$port" -U postgres -d "$db" \
            -c "$sql" 2>/dev/null) || true
    if [ "$hasil" = "$harapan" ]; then return 0; fi
    sleep 0.2
  done
  echo "TIMEOUT: menunggu '$sql' menjadi $harapan (port $port)" >&2
  return 1
}

echo "== Langkah 1: nyalakan kembali primary lama =="
"$PGBIN/pg_ctl" -D "$PRI" \
  -o "-p 54365 -k $SOCK -c listen_addresses=127.0.0.1" \
  -l "$BASE/primary-restart.log" start >/dev/null 2>&1
tunggu 54365 toko "SELECT pg_is_in_recovery();" "f"
echo "primary lama bangun sebagai server tulis penuh"

echo "== Langkah 2: timeline kedua server kini berbeda =="
psql -X -h 127.0.0.1 -p 54365 -U postgres -d toko \
  -c "SELECT timeline_id FROM pg_control_checkpoint();" \
  -c "SELECT pg_is_in_recovery() AS sedang_recovery;"
psql -X -h 127.0.0.1 -p 54366 -U postgres -d toko \
  -c "SELECT timeline_id FROM pg_control_checkpoint();" \
  -c "SELECT pg_is_in_recovery() AS sedang_recovery;"

echo "== Langkah 3: dua-duanya menerima tulisan — split brain =="
psql -X -h 127.0.0.1 -p 54365 -U postgres -d toko \
  -c "INSERT INTO produk VALUES (6, 'Susu UHT', 17500);"
psql -X -h 127.0.0.1 -p 54366 -U postgres -d toko \
  -c "INSERT INTO produk VALUES (7, 'Kopi Hitam', 13500);"

echo "== Langkah 4: isi tabel yang kini berbeda dua dunia =="
echo "primary LAMA (timeline 1):"
psql -X -h 127.0.0.1 -p 54365 -U postgres -d toko \
  -c "SELECT id, nama, harga FROM produk ORDER BY id;"
echo "primary BARU hasil promosi (timeline 2):"
psql -X -h 127.0.0.1 -p 54366 -U postgres -d toko \
  -c "SELECT id, nama, harga FROM produk ORDER BY id;"
