On Fri, Dec 18, 2009 at 8:32 PM, Simon Riggs <sri...@postgresql.org> wrote: > Log Message: > ----------- > Allow read only connections during recovery, known as Hot Standby. > > Enabled by recovery_connections = on (default) and forcing archive recovery > using a recovery.conf. Recovery processing now emulates the original > transactions as they are replayed, providing full locking and MVCC behaviour > for read only queries. Recovery must enter consistent state before > connections are allowed, so there is a delay, typically short, before > connections succeed. Replay of recovering transactions can conflict and in > some cases deadlock with queries during recovery; these result in query > cancellation after max_standby_delay seconds have expired. Infrastructure > changes have minor effects on normal running, though introduce four new types > of WAL record. > > New test mode "make standbycheck" allows regression tests of static command > behaviour on a standby server while in recovery. Typical and extreme dynamic > behaviours have been checked via code inspection and manual testing. Few port > specific behaviours have been utilised, though primary testing has been on > Linux only so far. > > This commit is the basic patch. Additional changes will follow in this > release to enhance some aspects of behaviour, notably improved handling of > conflicts, deadlock detection and query cancellation. Changes to VACUUM FULL > are also required. > > Simon Riggs, with significant and lengthy review by Heikki Linnakangas, > including streamlined redesign of snapshot creation and two-phase commit. > > Important contributions from Florian Pflug, Mark Kirkwood, Merlin Moncure, > Greg Stark, Gianni Ciolli, Gabriele Bartolini, Hannu Krosing, Robert Haas, > Tatsuo Ishii, Hiroyuki Yamada plus support and feedback from many other > community members. > > Modified Files: > -------------- > pgsql/doc/src/sgml: > backup.sgml (r2.130 -> r2.131) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/backup.sgml?r1=2.130&r2=2.131) > config.sgml (r1.238 -> r1.239) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/config.sgml?r1=1.238&r2=1.239) > func.sgml (r1.493 -> r1.494) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/func.sgml?r1=1.493&r2=1.494) > pgsql/doc/src/sgml/ref: > checkpoint.sgml (r1.16 -> r1.17) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/checkpoint.sgml?r1=1.16&r2=1.17) > pgsql/src/backend/access/gin: > ginxlog.c (r1.19 -> r1.20) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginxlog.c?r1=1.19&r2=1.20) > pgsql/src/backend/access/gist: > gistxlog.c (r1.32 -> r1.33) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gist/gistxlog.c?r1=1.32&r2=1.33) > pgsql/src/backend/access/heap: > heapam.c (r1.278 -> r1.279) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/heapam.c?r1=1.278&r2=1.279) > pruneheap.c (r1.18 -> r1.19) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/pruneheap.c?r1=1.18&r2=1.19) > pgsql/src/backend/access/index: > genam.c (r1.77 -> r1.78) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/index/genam.c?r1=1.77&r2=1.78) > indexam.c (r1.115 -> r1.116) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/index/indexam.c?r1=1.115&r2=1.116) > pgsql/src/backend/access/nbtree: > README (r1.20 -> r1.21) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/README?r1=1.20&r2=1.21) > nbtinsert.c (r1.174 -> r1.175) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtinsert.c?r1=1.174&r2=1.175) > nbtpage.c (r1.113 -> r1.114) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtpage.c?r1=1.113&r2=1.114) > nbtree.c (r1.172 -> r1.173) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtree.c?r1=1.172&r2=1.173) > nbtxlog.c (r1.55 -> r1.56) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtxlog.c?r1=1.55&r2=1.56) > pgsql/src/backend/access/transam: > README (r1.12 -> r1.13) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/README?r1=1.12&r2=1.13) > clog.c (r1.53 -> r1.54) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/clog.c?r1=1.53&r2=1.54) > multixact.c (r1.32 -> r1.33) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/multixact.c?r1=1.32&r2=1.33) > recovery.conf.sample (r1.4 -> r1.5) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/recovery.conf.sample?r1=1.4&r2=1.5) > rmgr.c (r1.27 -> r1.28) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/rmgr.c?r1=1.27&r2=1.28) > subtrans.c (r1.24 -> r1.25) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/subtrans.c?r1=1.24&r2=1.25) > twophase.c (r1.56 -> r1.57) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/twophase.c?r1=1.56&r2=1.57) > twophase_rmgr.c (r1.10 -> r1.11) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/twophase_rmgr.c?r1=1.10&r2=1.11) > xact.c (r1.277 -> r1.278) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xact.c?r1=1.277&r2=1.278) > xlog.c (r1.353 -> r1.354) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xlog.c?r1=1.353&r2=1.354) > pgsql/src/backend/commands: > dbcommands.c (r1.228 -> r1.229) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/dbcommands.c?r1=1.228&r2=1.229) > lockcmds.c (r1.25 -> r1.26) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/lockcmds.c?r1=1.25&r2=1.26) > sequence.c (r1.162 -> r1.163) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/sequence.c?r1=1.162&r2=1.163) > tablespace.c (r1.63 -> r1.64) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablespace.c?r1=1.63&r2=1.64) > vacuum.c (r1.398 -> r1.399) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c?r1=1.398&r2=1.399) > vacuumlazy.c (r1.124 -> r1.125) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuumlazy.c?r1=1.124&r2=1.125) > pgsql/src/backend/postmaster: > postmaster.c (r1.596 -> r1.597) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/postmaster.c?r1=1.596&r2=1.597) > pgsql/src/backend/storage/ipc: > Makefile (r1.22 -> r1.23) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/ipc/Makefile?r1=1.22&r2=1.23) > procarray.c (r1.51 -> r1.52) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/ipc/procarray.c?r1=1.51&r2=1.52) > sinvaladt.c (r1.79 -> r1.80) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/ipc/sinvaladt.c?r1=1.79&r2=1.80) > pgsql/src/backend/storage/lmgr: > README (r1.24 -> r1.25) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/lmgr/README?r1=1.24&r2=1.25) > lock.c (r1.188 -> r1.189) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/lmgr/lock.c?r1=1.188&r2=1.189) > proc.c (r1.209 -> r1.210) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/lmgr/proc.c?r1=1.209&r2=1.210) > pgsql/src/backend/tcop: > postgres.c (r1.578 -> r1.579) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/postgres.c?r1=1.578&r2=1.579) > utility.c (r1.324 -> r1.325) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/utility.c?r1=1.324&r2=1.325) > pgsql/src/backend/utils/adt: > txid.c (r1.8 -> r1.9) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/txid.c?r1=1.8&r2=1.9) > xid.c (r1.12 -> r1.13) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/xid.c?r1=1.12&r2=1.13) > pgsql/src/backend/utils/cache: > inval.c (r1.89 -> r1.90) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/inval.c?r1=1.89&r2=1.90) > pgsql/src/backend/utils/error: > elog.c (r1.219 -> r1.220) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/error/elog.c?r1=1.219&r2=1.220) > pgsql/src/backend/utils/init: > postinit.c (r1.198 -> r1.199) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/postinit.c?r1=1.198&r2=1.199) > pgsql/src/backend/utils/misc: > guc.c (r1.527 -> r1.528) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c?r1=1.527&r2=1.528) > postgresql.conf.sample (r1.271 -> r1.272) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/postgresql.conf.sample?r1=1.271&r2=1.272) > pgsql/src/backend/utils/time: > snapmgr.c (r1.12 -> r1.13) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/time/snapmgr.c?r1=1.12&r2=1.13) > tqual.c (r1.113 -> r1.114) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/time/tqual.c?r1=1.113&r2=1.114) > pgsql/src/bin/pg_controldata: > pg_controldata.c (r1.44 -> r1.45) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_controldata/pg_controldata.c?r1=1.44&r2=1.45) > pgsql/src/include: > miscadmin.h (r1.215 -> r1.216) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/miscadmin.h?r1=1.215&r2=1.216) > pgsql/src/include/access: > heapam.h (r1.144 -> r1.145) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/heapam.h?r1=1.144&r2=1.145) > htup.h (r1.107 -> r1.108) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/htup.h?r1=1.107&r2=1.108) > nbtree.h (r1.125 -> r1.126) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/nbtree.h?r1=1.125&r2=1.126) > relscan.h (r1.67 -> r1.68) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/relscan.h?r1=1.67&r2=1.68) > rmgr.h (r1.19 -> r1.20) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/rmgr.h?r1=1.19&r2=1.20) > subtrans.h (r1.12 -> r1.13) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/subtrans.h?r1=1.12&r2=1.13) > transam.h (r1.70 -> r1.71) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/transam.h?r1=1.70&r2=1.71) > twophase.h (r1.12 -> r1.13) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/twophase.h?r1=1.12&r2=1.13) > twophase_rmgr.h (r1.9 -> r1.10) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/twophase_rmgr.h?r1=1.9&r2=1.10) > xact.h (r1.98 -> r1.99) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xact.h?r1=1.98&r2=1.99) > xlog.h (r1.93 -> r1.94) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog.h?r1=1.93&r2=1.94) > xlog_internal.h (r1.25 -> r1.26) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog_internal.h?r1=1.25&r2=1.26) > pgsql/src/include/catalog: > pg_control.h (r1.44 -> r1.45) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_control.h?r1=1.44&r2=1.45) > pg_proc.h (r1.556 -> r1.557) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_proc.h?r1=1.556&r2=1.557) > pgsql/src/include/storage: > lock.h (r1.116 -> r1.117) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/lock.h?r1=1.116&r2=1.117) > proc.h (r1.114 -> r1.115) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/proc.h?r1=1.114&r2=1.115) > procarray.h (r1.26 -> r1.27) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/procarray.h?r1=1.26&r2=1.27) > sinval.h (r1.53 -> r1.54) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/sinval.h?r1=1.53&r2=1.54) > sinvaladt.h (r1.51 -> r1.52) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/sinvaladt.h?r1=1.51&r2=1.52) > pgsql/src/include/utils: > builtins.h (r1.341 -> r1.342) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/builtins.h?r1=1.341&r2=1.342) > snapshot.h (r1.5 -> r1.6) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/snapshot.h?r1=1.5&r2=1.6) > pgsql/src/test/regress: > GNUmakefile (r1.80 -> r1.81) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/GNUmakefile?r1=1.80&r2=1.81) > pg_regress.c (r1.67 -> r1.68) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/pg_regress.c?r1=1.67&r2=1.68) > > Added Files: > ----------- > pgsql/src/backend/storage/ipc: > standby.c (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/ipc/standby.c?rev=1.1&content-type=text/x-cvsweb-markup) > pgsql/src/include/storage: > standby.h (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/standby.h?rev=1.1&content-type=text/x-cvsweb-markup) > pgsql/src/test/regress: > standby_schedule (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/standby_schedule?rev=1.1&content-type=text/x-cvsweb-markup) > pgsql/src/test/regress/expected: > hs_standby_allowed.out (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/hs_standby_allowed.out?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_check.out (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/hs_standby_check.out?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_disallowed.out (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/hs_standby_disallowed.out?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_functions.out (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/hs_standby_functions.out?rev=1.1&content-type=text/x-cvsweb-markup) > pgsql/src/test/regress/sql: > hs_primary_extremes.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_primary_extremes.sql?rev=1.1&content-type=text/x-cvsweb-markup) > hs_primary_setup.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_primary_setup.sql?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_allowed.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_standby_allowed.sql?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_check.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_standby_check.sql?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_disallowed.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_standby_disallowed.sql?rev=1.1&content-type=text/x-cvsweb-markup) > hs_standby_functions.sql (r1.1) > > (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/hs_standby_functions.sql?rev=1.1&content-type=text/x-cvsweb-markup)
Congratulations! And, may I be the first to say - woo hoo! ...Robert -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers