Hello hackers, With a master-standby setup configured on the same machine, I'm getting a panic in tablespace test while running make installcheck.
1. CREATE TABLESPACE regress_tblspacewith LOCATION 'blah'; 2. DROP TABLESPACE regress_tblspacewith; 3. CREATE TABLESPACE regress_tblspace LOCATION 'blah'; -- do some operations in this tablespace 4. DROP TABLESPACE regress_tblspace; The master panics at the last statement when standby has completed applying the WAL up to step 2 but hasn't started step 3. PANIC: could not fsync file "pg_tblspc/16387/PG_12_201904072/16384/16446": No such file or directory The reason is both the tablespace points to the same location. When master tries to delete the new tablespace (and requests a checkpoint), the corresponding folder is already deleted by the standby while applying WAL to delete the old tablespace. I'm able to reproduce the issue with the attached script. sh standby-server-setup.sh make installcheck I accept that configuring master-standby on the same machine for this test is not okay. But, can we avoid the PANIC somehow? Or, is this intentional and I should not include testtablespace in this case? -- Thanks & Regards, Kuntal Ghosh EnterpriseDB: http://www.enterprisedb.com
echo "Cleaning.." pkill -9 postgres rm -rf *_logfile rm /tmp/failover.log rm -rf /tmp/archive_dir mkdir /tmp/archive_dir export PGPORT=5432 #MASTER PORT PGSQL_DIR=$(pwd) PGSQL_BIN=$PGSQL_DIR/install/bin PGSQL_MASTER=$PGSQL_BIN/master #DATA FOLDER FOR PRIMARY/MASTER SERVER PGSQL_STANDBY=$PGSQL_BIN/standby #DATA FOLDER FOR BACKUP/STANDBY SERVER #Cleanup the master and slave data directory and create a new one. rm -rf $PGSQL_MASTER $PGSQL_STANDBY mkdir $PGSQL_MASTER $PGSQL_STANDBY chmod 700 $PGSQL_MASTER chmod 700 $PGSQL_STANDBY #Initialize MASTER $PGSQL_BIN/initdb -D $PGSQL_MASTER echo "wal_level = hot_standby" >> $PGSQL_MASTER/postgresql.conf echo "max_wal_senders = 3" >> $PGSQL_MASTER/postgresql.conf echo "wal_keep_segments = 50" >> $PGSQL_MASTER/postgresql.conf echo "hot_standby = on" >> $PGSQL_MASTER/postgresql.conf #echo "max_standby_streaming_delay= -1" >> $PGSQL_MASTER/postgresql.conf #echo "wal_consistency_checking='all'" >> $PGSQL_MASTER/postgresql.conf echo "max_wal_size= 10GB" >> $PGSQL_MASTER/postgresql.conf #echo "log_min_messages= debug2" >> $PGSQL_MASTER/postgresql.conf #Setup replication settings #Start Master export PGPORT=5432 echo "Starting Master.." $PGSQL_BIN/pg_ctl -D $PGSQL_MASTER -c -w -l master_logfile start #Perform Backup in the Standy Server $PGSQL_BIN/pg_basebackup --pgdata=$PGSQL_STANDBY -P echo "primary_conninfo= 'port=5432'" >> $PGSQL_STANDBY/postgresql.conf touch $PGSQL_STANDBY/standby.signal #echo "standby_mode = on" >> $PGSQL_STANDBY/postgresql.conf #Start STANDBY export PGPORT=5433 echo "Starting Slave.." $PGSQL_BIN/pg_ctl -D $PGSQL_STANDBY -c -w -l slave_logfile start