
#-------------------------------------

pg_ctl -D switch -w -m immediate stop

#-------------------------------------
# Test 1 - basic log switch, shutdown

#expect switch ignored after clean shutdown

rm -R switch
initdb -D switch
pg_ctl -D switch -w start

psql <<EOF
select pg_switch_xlog();
create table switchtest (col1 integer);
\q
EOF

pg_ctl -D switch -w -m fast stop
pg_ctl -D switch -w start
pg_ctl -D switch -w -m fast stop

sleep 3

#-------------------------------------
# Test 2 - basic log switch, then crash

#expect recover all

rm -R switch
initdb -D switch
pg_ctl -D switch -w start

psql <<EOF
select pg_switch_xlog();
create table switchtest (col1 integer);
\q
EOF

pg_ctl -D switch -w -m immediate stop
pg_ctl -D switch -w start
pg_ctl -D switch -w -m fast stop

# Sample recovery

#LOG:  database system was interrupted at 2006-07-31 22:53:42 BST
#LOG:  checkpoint record is at 0/38B34C
#LOG:  redo record is at 0/38B34C; undo record is at 0/0; shutdown TRUE
#LOG:  next transaction ID: 593; next OID: 10815
#LOG:  next MultiXactId: 1; next MultiXactOffset: 0
#LOG:  database system was not properly shut down; automatic recovery in progress
#LOG:  redo starts at 0/38B390
#LOG:  reading processing instruction: xlog switch; redo pointer at 0/38B390
#CONTEXT:  xlog redo xlog switch: 2006-07-31 22:53:42
#LOG:  executing processing instruction: xlog switch; redo pointer moved to 0/1000000
#LOG:  record with zero length at 0/101092C
#LOG:  redo done at 0/1010904
#LOG:  database system is ready

sleep 3

#-------------------------------------
# Test 3 - log switch, then crash!

#expect lose switch

rm -R switch
initdb -D switch

pg_ctl -D switch -w start

psql <<EOF
select pg_switch_xlog();
\q
EOF

pg_ctl -D switch -w -m immediate stop
pg_ctl -D switch -w start
pg_ctl -D switch -w -m fast stop

sleep 3

#-------------------------------------
# Test 4 - multiple switches, then crash!

#expect second switch ignored, then first ignored during recovery

rm -R switch
initdb -D switch

pg_ctl -D switch -w start

psql <<EOF
select pg_switch_xlog();
select pg_switch_xlog();
\q
EOF

pg_ctl -D switch -w -m immediate stop
pg_ctl -D switch -w start

# Sample recovery

#LOG:  database system was interrupted at 2006-07-31 22:54:06 BST
#LOG:  checkpoint record is at 0/38B34C
#LOG:  redo record is at 0/38B34C; undo record is at 0/0; shutdown TRUE
#LOG:  next transaction ID: 593; next OID: 10815
#LOG:  next MultiXactId: 1; next MultiXactOffset: 0
#LOG:  database system was not properly shut down; automatic recovery in progressLOG:  redo starts at 0/38B390
#LOG:  reading processing instruction: xlog switch; redo pointer at 0/38B390
#CONTEXT:  xlog redo xlog switch: 2006-07-31 22:54:06
#LOG:  executing processing instruction: xlog switch; redo pointer moved to 0/1000000
#LOG:  record with zero length at 0/1000020
#LOG:  skipping trailing processing instructions
#LOG:  redo done at 0/38B390
#LOG:  database system is ready

pg_ctl -D switch -w -m fast stop

sleep 3

#-------------------------------------
# Test 5 - multi switch, plus work, then crash!

#expect recover all

rm -R switch
initdb -D switch

pg_ctl -D switch -w start

psql <<EOF
select pg_switch_xlog();
create table switchtest (col1 integer);
select pg_switch_xlog();
insert into switchtest values (1);
\q
EOF

pg_ctl -D switch -w -m immediate stop
pg_ctl -D switch -w start

# Sample output

#LOG:  database system was interrupted at 2006-07-31 22:54:20 BST
#LOG:  checkpoint record is at 0/38B34C
#LOG:  redo record is at 0/38B34C; undo record is at 0/0; shutdown TRUE
#LOG:  next transaction ID: 593; next OID: 10815
#LOG:  next MultiXactId: 1; next MultiXactOffset: 0
#LOG:  database system was not properly shut down; automatic recovery in progressLOG:  redo starts at 0/38B390
#LOG:  reading processing instruction: xlog switch; redo pointer at 0/38B390
#CONTEXT:  xlog redo xlog switch: 2006-07-31 22:54:18
#LOG:  executing processing instruction: xlog switch; redo pointer moved to 0/1000000
#LOG:  reading processing instruction: xlog switch; redo pointer at 0/101092C
#CONTEXT:  xlog redo xlog switch: 2006-07-31 22:54:18
#LOG:  executing processing instruction: xlog switch; redo pointer moved to 0/2000000
#LOG:  record with zero length at 0/2000080
#LOG:  redo done at 0/2000058
#LOG:  database system is ready


pg_ctl -D switch -w -m fast stop

sleep 3

