postgresql/src
Tom Lane 6eedec19f0 Protect against SnapshotNow race conditions in pg_tablespace scans.
Use of SnapshotNow is known to expose us to race conditions if the tuple(s)
being sought could be updated by concurrently-committing transactions.
CREATE DATABASE and DROP DATABASE are particularly exposed because they do
heavyweight filesystem operations during their scans of pg_tablespace,
so that the scans run for a very long time compared to most.  Furthermore,
the potential consequences of a missed or twice-visited row are nastier
than average:

* createdb() could fail with a bogus "file already exists" error, or
  silently fail to copy one or more tablespace's worth of files into the
  new database.

* remove_dbtablespaces() could miss one or more tablespaces, thus failing
  to free filesystem space for the dropped database.

* check_db_file_conflict() could likewise miss a tablespace, leading to an
  OID conflict that could result in data loss either immediately or in
  future operations.  (This seems of very low probability, though, since a
  duplicate database OID would be unlikely to start with.)

Hence, it seems worth fixing these three places to use MVCC snapshots, even
though this will someday be superseded by a generic solution to SnapshotNow
race conditions.

Back-patch to all active branches.

Stephen Frost and Tom Lane
2013-01-18 18:06:50 -05:00
..
backend Protect against SnapshotNow race conditions in pg_tablespace scans. 2013-01-18 18:06:50 -05:00
bin On second thought, use an empty string instead of "none" when not connected. 2013-01-15 22:14:25 +02:00
include Stamp 8.3.22. 2012-12-03 15:28:41 -05:00
interfaces Stamp 8.3.22. 2012-12-03 15:28:41 -05:00
makefiles Fix PGXS support for building loadable modules on AIX. 2012-10-09 21:04:30 -04:00
pl Back-patch fix and test case for bug #7516. 2012-09-14 11:50:19 -04:00
port Stamp 8.3.22. 2012-12-03 15:28:41 -05:00
template Use SYSV semaphores rather than POSIX on Darwin >= 6.0 (i.e., OS X 10.2 2007-09-26 00:32:46 +00:00
test Prevent passing gmake's environment variables down through pg_regress. 2012-12-01 17:24:15 -05:00
timezone Add new timezone abbrevation "FET". 2013-01-14 14:47:34 -05:00
tools Backpatch "Use the preferred version of xsubpp." 2011-11-28 07:46:15 -05:00
tutorial Update copyrights in source tree to 2008. 2008-01-01 19:46:01 +00:00
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:12 +02:00
bcc32.mak Remove old-style win32 client-only visual c++ build infrastructure for everything except 2007-03-05 14:18:38 +00:00
DEVELOPERS Testing commit stuff 2006-07-10 15:50:02 +00:00
Makefile Tsearch2 functionality migrates to core. The bulk of this work is by 2007-08-21 01:11:32 +00:00
Makefile.global.in Back-patch creation of tar.bz2 tarball during "make dist". 2011-07-03 16:40:34 -04:00
Makefile.shlib Fix assorted issues with build and install paths containing spaces. 2011-06-14 16:24:45 -04:00
nls-global.mk When merging PO files, take into consideration translations in other PO 2006-04-05 13:40:15 +00:00
win32.mak Update supported standalone VC++ version to 7.1+ only, and fix 2007-08-03 10:47:11 +00:00