Robert Haas [Thu, 30 Aug 2012 13:34:59 +0000 (13:34 +0000)]
Rearrange pointers so that the freelist pointers are as far from
each other as possible, to reduce contention.
Robert Haas [Fri, 3 Aug 2012 16:59:24 +0000 (16:59 +0000)]
Code cleanup.
Robert Haas [Fri, 3 Aug 2012 15:35:57 +0000 (15:35 +0000)]
Reorganize fields to match comments.
Robert Haas [Fri, 3 Aug 2012 12:15:11 +0000 (12:15 +0000)]
Refactor garbage collection logic into a separate subroutine.
Robert Haas [Fri, 3 Aug 2012 12:01:24 +0000 (12:01 +0000)]
Set hazard pointers correctly instead of wrong. Duh.
Robert Haas [Thu, 2 Aug 2012 18:50:32 +0000 (18:50 +0000)]
De-obfuscate deletion code, maybe.
Robert Haas [Thu, 2 Aug 2012 18:31:02 +0000 (18:31 +0000)]
Code tightening.
Robert Haas [Thu, 2 Aug 2012 17:59:24 +0000 (17:59 +0000)]
Add memory barrier in single-node-reclaim case. Improve comments.
Robert Haas [Thu, 2 Aug 2012 17:03:34 +0000 (17:03 +0000)]
Get rid of CHashBucketCleanup; CHashBucketScan can do what we need.
This might seem less efficient because we actually examine the hash codes
and node contents this way, and that's true, but on the upside we get to
stop the scan early sometimes. Furthermore, benchmarking reveals that
cleanup scans are (thankfully) quite rare, even in highly concurrent
scenarios, so it doesn't seem worth expending extra code (with the
attendant risk of bugs) to optimize that path.
Robert Haas [Thu, 2 Aug 2012 16:23:31 +0000 (16:23 +0000)]
Comment fixes.
Robert Haas [Thu, 2 Aug 2012 15:45:46 +0000 (15:45 +0000)]
Track GC reclaims skipped in stats.
Robert Haas [Thu, 2 Aug 2012 14:28:51 +0000 (14:28 +0000)]
Wonky hack to print stats on every backend exit.
Robert Haas [Thu, 2 Aug 2012 14:01:20 +0000 (14:01 +0000)]
Rewrite statistics system.
Robert Haas [Wed, 1 Aug 2012 23:48:41 +0000 (23:48 +0000)]
Minor optimization of allocator.
Robert Haas [Wed, 1 Aug 2012 20:37:28 +0000 (20:37 +0000)]
If we fail to allocate from a non-empty freelist, retry same list.
Robert Haas [Wed, 1 Aug 2012 20:24:26 +0000 (20:24 +0000)]
Add some missing stats counter bumps.
Robert Haas [Wed, 1 Aug 2012 17:43:28 +0000 (17:43 +0000)]
Increase maximum number of freelists from 16 to 64, per testing.
Robert Haas [Wed, 1 Aug 2012 17:37:42 +0000 (17:37 +0000)]
Bug fixes.
Robert Haas [Wed, 1 Aug 2012 17:06:51 +0000 (17:06 +0000)]
Implement concurrent and collision tests for dynahash.
Robert Haas [Wed, 1 Aug 2012 16:51:09 +0000 (16:51 +0000)]
Fix ABA problem with inserts.
Robert Haas [Wed, 1 Aug 2012 16:13:36 +0000 (16:13 +0000)]
Get rid of chash_bucket hack in favor of using formal hazard pointers.
Robert Haas [Wed, 1 Aug 2012 15:56:30 +0000 (15:56 +0000)]
Code cleanup.
Robert Haas [Mon, 30 Jul 2012 17:34:15 +0000 (17:34 +0000)]
Better statistics stuff.
Robert Haas [Mon, 30 Jul 2012 16:24:53 +0000 (16:24 +0000)]
Minor code beautification.
Robert Haas [Mon, 30 Jul 2012 16:22:12 +0000 (16:22 +0000)]
Statistics code.
Robert Haas [Mon, 30 Jul 2012 15:49:18 +0000 (15:49 +0000)]
Improve comments about gc_next.
Robert Haas [Mon, 30 Jul 2012 13:27:10 +0000 (13:27 +0000)]
Code rearrangement. Cosmetic only.
Robert Haas [Fri, 27 Jul 2012 18:28:04 +0000 (18:28 +0000)]
Another test case.
Robert Haas [Fri, 27 Jul 2012 18:19:47 +0000 (18:19 +0000)]
Fix another bug related to marked CHashPtrs.
Robert Haas [Fri, 27 Jul 2012 17:49:12 +0000 (17:49 +0000)]
Improve testing code to better diagnose concurrency bugs.
Robert Haas [Fri, 27 Jul 2012 17:29:26 +0000 (17:29 +0000)]
Don't bogusly propagate delete-marks.
Robert Haas [Fri, 27 Jul 2012 16:36:07 +0000 (16:36 +0000)]
Add missing else.
Robert Haas [Fri, 27 Jul 2012 16:34:50 +0000 (16:34 +0000)]
Thinko: of course, invalid CHashPtrs can also be delete-marked.
Robert Haas [Fri, 27 Jul 2012 16:10:13 +0000 (16:10 +0000)]
Concurrency test function for chash.
Robert Haas [Fri, 27 Jul 2012 15:44:58 +0000 (15:44 +0000)]
Stupid bug fix.
Robert Haas [Fri, 27 Jul 2012 15:03:00 +0000 (11:03 -0400)]
Separate dynahash insert, search, delete tests.
Robert Haas [Fri, 27 Jul 2012 15:03:00 +0000 (11:03 -0400)]
Separate chash insert, search, delete tests.
Robert Haas [Fri, 27 Jul 2012 04:22:47 +0000 (00:22 -0400)]
Test code for deletes, and associated bug fixes.
Robert Haas [Fri, 27 Jul 2012 04:14:08 +0000 (00:14 -0400)]
Add cleanup scan logic.
Robert Haas [Fri, 27 Jul 2012 03:51:08 +0000 (23:51 -0400)]
Bug fixes.
Robert Haas [Thu, 26 Jul 2012 21:43:15 +0000 (17:43 -0400)]
Unify scan code.
Robert Haas [Thu, 26 Jul 2012 19:51:04 +0000 (15:51 -0400)]
Further simplifications.
Robert Haas [Thu, 26 Jul 2012 19:24:19 +0000 (15:24 -0400)]
Update comments.
Robert Haas [Thu, 26 Jul 2012 18:45:10 +0000 (14:45 -0400)]
Adapt code to use compare-and-swap.
Robert Haas [Thu, 26 Jul 2012 16:50:12 +0000 (12:50 -0400)]
CHashAddToGarbage
Robert Haas [Wed, 25 Jul 2012 21:10:29 +0000 (17:10 -0400)]
First attempt at CHashDelete - slightly incomplete, and untested.
Robert Haas [Wed, 25 Jul 2012 20:05:50 +0000 (16:05 -0400)]
More micro-optimization.
Robert Haas [Wed, 25 Jul 2012 17:44:25 +0000 (13:44 -0400)]
Use faster memory barrier on x86.
Robert Haas [Wed, 25 Jul 2012 17:39:55 +0000 (13:39 -0400)]
Fix stupid thinko.
Robert Haas [Wed, 25 Jul 2012 16:24:24 +0000 (12:24 -0400)]
Time inserts, searches.
Robert Haas [Wed, 25 Jul 2012 16:18:31 +0000 (12:18 -0400)]
Some micro-optimization and code beautification.
Robert Haas [Wed, 25 Jul 2012 15:58:47 +0000 (11:58 -0400)]
Show shared memory allocated for each hash table.
Robert Haas [Wed, 25 Jul 2012 15:35:47 +0000 (11:35 -0400)]
Improve dynahash test code.
Robert Haas [Wed, 25 Jul 2012 14:52:54 +0000 (10:52 -0400)]
Beginnings of dynahash testing code.
Robert Haas [Wed, 25 Jul 2012 14:21:40 +0000 (10:21 -0400)]
Avoid leaking nodes on a failed insert.
Robert Haas [Wed, 25 Jul 2012 14:12:06 +0000 (10:12 -0400)]
Better debugging code, another bug fix.
Robert Haas [Wed, 25 Jul 2012 14:02:53 +0000 (10:02 -0400)]
More bug fixing.
Robert Haas [Wed, 25 Jul 2012 13:59:03 +0000 (09:59 -0400)]
More debugging code.
Robert Haas [Wed, 25 Jul 2012 12:57:36 +0000 (08:57 -0400)]
Remove debugging code.
Robert Haas [Wed, 25 Jul 2012 04:21:37 +0000 (00:21 -0400)]
Testing code and resulting bug fixes.
Robert Haas [Tue, 24 Jul 2012 16:30:41 +0000 (12:30 -0400)]
An attempt at making insertion work.
Robert Haas [Tue, 24 Jul 2012 12:59:26 +0000 (08:59 -0400)]
Tabify.
Robert Haas [Sat, 14 Jul 2012 05:44:22 +0000 (01:44 -0400)]
Start of work on GC.
Robert Haas [Fri, 13 Jul 2012 23:09:26 +0000 (19:09 -0400)]
More initialization code.
Robert Haas [Fri, 13 Jul 2012 20:33:41 +0000 (16:33 -0400)]
Support dependency barriers.
Robert Haas [Fri, 13 Jul 2012 20:25:35 +0000 (16:25 -0400)]
First attempt at CHashSearch.
Robert Haas [Fri, 13 Jul 2012 05:38:37 +0000 (01:38 -0400)]
More work on chash. Initialization theoretically works now.
Robert Haas [Wed, 4 Jul 2012 18:50:19 +0000 (14:50 -0400)]
Start of work on chash.
Peter Eisentraut [Mon, 23 Jul 2012 19:31:43 +0000 (22:31 +0300)]
Update information schema to SQL:2011
This is just a section renumbering for now. Some details might be
filled in later.
Robert Haas [Mon, 23 Jul 2012 18:38:34 +0000 (14:38 -0400)]
Make pgbench vacuum before building indexes.
This is apparently faster than doing things the other way around when
the scale factor is large.
Along the way, adjust -n to suppress vacuuming during initialization
as well as during test runs.
Jeff Janes, with some small changes by me.
Tom Lane [Sun, 22 Jul 2012 04:01:19 +0000 (00:01 -0400)]
Fix name collision between concurrent regression tests.
Commit
f5bcd398addcbeb785f0513cf28cba5d1ecd2c8a introduced a test using
a table named "circles" in inherit.sql. Unfortunately, the concurrently
executed constraints test was already using that table name, so the
parallel regression tests would sometimes fail. Rename table to dodge
the problem. Per buildfarm.
Tom Lane [Sun, 22 Jul 2012 00:10:29 +0000 (20:10 -0400)]
Improve copydir() code for the case that fsync is off.
We should avoid calling sync_file_range or posix_fadvise in this case,
since (a) we don't really care if the data gets synced, and might as
well save the kernel calls; (b) at least on Linux we know that the
kernel might block us until it's scheduled the write.
Also, avoid making a useless second traversal of the directory tree
if we're not actually going to call fsync(2) after all.
Tom Lane [Sat, 21 Jul 2012 23:56:22 +0000 (19:56 -0400)]
Use --nosync during make check's initdb call.
We left this out of commit
b966dd6c4228d696b291c1cdcb5ab8c8475fefa8
so as to get some more buildfarm testing of the new fsync code in initdb.
But since no problems have turned up, it's probably time to save the
cycles.
Tom Lane [Sat, 21 Jul 2012 23:39:03 +0000 (19:39 -0400)]
Suppress volatile-related warning seen in some compilers.
Antique versions of gcc complain about vars that are initialized outside
PG_TRY and then modified within it. Rather than marking the var volatile,
expend one more line of code.
Tom Lane [Sat, 21 Jul 2012 21:45:07 +0000 (17:45 -0400)]
Account for SRFs in targetlists in planner rowcount estimates.
We made use of the ROWS estimate for set-returning functions used in FROM,
but not for those used in SELECT targetlists; which is a bit of an
oversight considering there are common usages that require the latter
approach. Improve that. (I had initially thought it might be worth
folding this into cost_qual_eval, but after investigation concluded that
that wouldn't be very helpful, so just do it separately.) Per complaint
from David Johnston.
Back-patch to 9.2, but not further, for fear of destabilizing plan choices
in existing releases.
Robert Haas [Sat, 21 Jul 2012 02:31:19 +0000 (22:31 -0400)]
Revert temporary patch to debug Windows breakage.
This reverts commit
0a248208a038d7847ef98996c6b70209d782415c.
Robert Haas [Sat, 21 Jul 2012 01:25:26 +0000 (21:25 -0400)]
Repair plpgsql_validator breakage.
Commit
3a0e4d36ebd7f477822d5bae41ba121a40d22ccc arranged to
reference stack-allocated variables after they were out of scope.
That's no good, so let's arrange to not do that after all.
Andrew Dunstan [Fri, 20 Jul 2012 20:30:34 +0000 (16:30 -0400)]
Remove now unneeded results file for disabled prepared transactions case.
Robert Haas [Fri, 20 Jul 2012 20:20:15 +0000 (16:20 -0400)]
Temporary patch to try to debug why event trigger patch broke Windows.
Apologies for the ugliness.
Andrew Dunstan [Fri, 20 Jul 2012 19:51:40 +0000 (15:51 -0400)]
Remove prepared transactions from main isolation test schedule.
There is no point in running this test when prepared transactions are disabled,
which is the default. New make targets that include the test are provided. This
will save some useless waste of cycles on buildfarm machines.
Backpatch to 9.1 where these tests were introduced.
Peter Eisentraut [Fri, 20 Jul 2012 19:34:11 +0000 (22:34 +0300)]
pg_dump: Simplify mkdir() error checking
mkdir() can check for errors itself. We don't need to code that
ourselves again.
Alvaro Herrera [Fri, 20 Jul 2012 16:33:34 +0000 (12:33 -0400)]
connoinherit may be true only for CHECK constraints
The code was setting it true for other constraints, which is
bogus. Doing so caused bogus catalog entries for such constraints, and
in particular caused an error to be raised when trying to drop a
constraint of types other than CHECK from a table that has children,
such as reported in bug #6712.
In 9.2, additionally ignore connoinherit=true for other constraint
types, to avoid having to force initdb; existing databases might already
contain bogus catalog entries.
Includes a catversion bump (in HEAD only).
Bug report from Miroslav Šulc
Analysis from Amit Kapila and Noah Misch; Amit also contributed the patch.
Tom Lane [Fri, 20 Jul 2012 17:09:00 +0000 (13:09 -0400)]
Fix whole-row Var evaluation to cope with resjunk columns (again).
When a whole-row Var is reading the result of a subquery, we need it to
ignore any "resjunk" columns that the subquery might have evaluated for
GROUP BY or ORDER BY purposes. We've hacked this area before, in commit
68e40998d058c1f6662800a648ff1e1ce5d99cba, but that fix only covered
whole-row Vars of named composite types, not those of RECORD type; and it
was mighty klugy anyway, since it just assumed without checking that any
extra columns in the result must be resjunk. A proper fix requires getting
hold of the subquery's targetlist so we can actually see which columns are
resjunk (whereupon we can use a JunkFilter to get rid of them). So bite
the bullet and add some infrastructure to make that possible.
Per report from Andrew Dunstan and additional testing by Merlin Moncure.
Back-patch to all supported branches. In 8.3, also back-patch commit
292176a118da6979e5d368a4baf27f26896c99a5, which for some reason I had
not done at the time, but it's a prerequisite for this change.
Robert Haas [Fri, 20 Jul 2012 15:38:47 +0000 (11:38 -0400)]
Make new event trigger facility actually do something.
Commit
3855968f328918b6cd1401dd11d109d471a54d40 added syntax, pg_dump,
psql support, and documentation, but the triggers didn't actually fire.
With this commit, they now do. This is still a pretty basic facility
overall because event triggers do not get a whole lot of information
about what the user is trying to do unless you write them in C; and
there's still no option to fire them anywhere except at the very
beginning of the execution sequence, but it's better than nothing,
and a good building block for future work.
Along the way, add a regression test for ALTER LARGE OBJECT, since
testing of event triggers reveals that we haven't got one.
Dimitri Fontaine and Robert Haas
Tom Lane [Thu, 19 Jul 2012 23:28:22 +0000 (19:28 -0400)]
Rethink checkpointer's fsync-request table representation.
Instead of having one hash table entry per relation/fork/segment, just have
one per relation, and use bitmapsets to represent which specific segments
need to be fsync'd. This eliminates the need to scan the whole hash table
to implement FORGET_RELATION_FSYNC, which fixes the O(N^2) behavior
recently demonstrated by Jeff Janes for cases involving lots of TRUNCATE or
DROP TABLE operations during a single checkpoint cycle. Per an idea from
Robert Haas.
(FORGET_DATABASE_FSYNC still sucks, but since dropping a database is a
pretty expensive operation anyway, we'll live with that.)
In passing, improve the delayed-unlink code: remove the pass over the list
in mdpreckpt, since it wasn't doing anything for us except supporting a
useless Assert in mdpostckpt, and fix mdpostckpt so that it will absorb
fsync requests every so often when clearing a large backlog of deletion
requests.
Tom Lane [Thu, 19 Jul 2012 17:07:33 +0000 (13:07 -0400)]
Send only one FORGET_RELATION_FSYNC request when dropping a relation.
We were sending one per fork, but a little bit of refactoring allows us
to send just one request with forknum == InvalidForkNumber. This not only
reduces pressure on the shared-memory request queue, but saves repeated
traversals of the checkpointer's hash table.
Heikki Linnakangas [Wed, 18 Jul 2012 19:34:06 +0000 (22:34 +0300)]
Refactor the way code is shared between some range type functions.
Functions like range_eq, range_before etc. are exposed at the SQL-level, but
they're also used internally by the GiST consistent support function. The
code sharing was done by a hack, TrickFunctionCall2, which relied on the
knowledge that all the functions used fn_extra the same way. This commit
splits the functions into internal versions that take a TypeCacheEntry as
argument, and thin wrappers to expose the functions at the SQL-level. The
internal versions can then be called directly and in a less hacky way from
the GiST consistent function.
This is just cosmetic, but backpatch to 9.2 anyway, to avoid having a
different version of this code in the 9.2 branch. That would make
backpatching fixes in this area more difficult.
Alexander Korotkov
Tom Lane [Wed, 18 Jul 2012 19:40:31 +0000 (15:40 -0400)]
Fix statistics breakage from bgwriter/checkpointer process split.
ForwardFsyncRequest() supposed that it could only be called in regular
backends, which used to be true; but since the splitup of bgwriter and
checkpointer, it is also called in the bgwriter. We do not want to count
such calls in pg_stat_bgwriter.buffers_backend statistics, so fix things
so that they aren't.
(It's worth noting here that this implies an alarmingly large increase in
the expected amount of cross-process fsync request traffic, which may well
mean that the process splitup was not such a hot idea.)
Tom Lane [Wed, 18 Jul 2012 19:28:10 +0000 (15:28 -0400)]
Fix management of pendingOpsTable in auxiliary processes.
mdinit() was misusing IsBootstrapProcessingMode() to decide whether to
create an fsync pending-operations table in the current process. This led
to creating a table not only in the startup and checkpointer processes as
intended, but also in the bgwriter process, not to mention other auxiliary
processes such as walwriter and walreceiver. Creation of the table in the
bgwriter is fatal, because it absorbs fsync requests that should have gone
to the checkpointer; instead they just sit in bgwriter local memory and are
never acted on. So writes performed by the bgwriter were not being fsync'd
which could result in data loss after an OS crash. I think there is no
live bug with respect to walwriter and walreceiver because those never
perform any writes of shared buffers; but the potential is there for
future breakage in those processes too.
To fix, make AuxiliaryProcessMain() export the current process's
AuxProcType as a global variable, and then make mdinit() test directly for
the types of aux process that should have a pendingOpsTable. Having done
that, we might as well also get rid of the random bool flags such as
am_walreceiver that some of the aux processes had grown. (Note that we
could not have fixed the bug by examining those variables in mdinit(),
because it's called from BaseInit() which is run by AuxiliaryProcessMain()
before entering any of the process-type-specific code.)
Back-patch to 9.2, where the problem was introduced by the split-up of
bgwriter and checkpointer processes. The bogus pendingOpsTable exists
in walwriter and walreceiver processes in earlier branches, but absent
any evidence that it causes actual problems there, I'll leave the older
branches alone.
Robert Haas [Wed, 18 Jul 2012 14:16:16 +0000 (10:16 -0400)]
Syntax support and documentation for event triggers.
They don't actually do anything yet; that will get fixed in a
follow-on commit. But this gets the basic infrastructure in place,
including CREATE/ALTER/DROP EVENT TRIGGER; support for COMMENT,
SECURITY LABEL, and ALTER EXTENSION .. ADD/DROP EVENT TRIGGER;
pg_dump and psql support; and documentation for the anticipated
initial feature set.
Dimitri Fontaine, with review and a bunch of additional hacking by me.
Thom Brown extensively reviewed earlier versions of this patch set,
but there's not a whole lot of that code left in this commit, as it
turns out.
Tom Lane [Wed, 18 Jul 2012 05:23:12 +0000 (01:23 -0400)]
Get rid of useless global variable in pg_upgrade.
Since the scandir() emulation was taken out of pg_upgrade, there's
no longer any need for scandir_file_pattern to exist as a global
variable. Replace it with a local in the one remaining function
that was making use of it.
Tom Lane [Wed, 18 Jul 2012 05:13:20 +0000 (01:13 -0400)]
Improve pg_upgrade's load_directory() function.
Error out on out-of-memory, rather than returning -1, which the sole
existing caller wasn't checking for anyway. There doesn't seem to be
any use-case for making the caller check for failure here.
Detect failure return from readdir().
Use a less platform-dependent method of calculating the entrysize.
It's possible, but not yet confirmed, that this explains bug #6733,
in which Mike Wilson reports a pg_upgrade crash that did not occur
in 9.1. (Note that load_directory is effectively new code in 9.2,
at least on platforms that have scandir().)
Fix up comments, avoid uselessly using two counters, reduce the number
of realloc calls to something sane.
Tom Lane [Tue, 17 Jul 2012 20:55:39 +0000 (16:55 -0400)]
Improve coding around the fsync request queue.
In all branches back to 8.3, this patch fixes a questionable assumption in
CompactCheckpointerRequestQueue/CompactBgwriterRequestQueue that there are
no uninitialized pad bytes in the request queue structs. This would only
cause trouble if (a) there were such pad bytes, which could happen in 8.4
and up if the compiler makes enum ForkNumber narrower than 32 bits, but
otherwise would require not-currently-planned changes in the widths of
other typedefs; and (b) the kernel has not uniformly initialized the
contents of shared memory to zeroes. Still, it seems a tad risky, and we
can easily remove any risk by pre-zeroing the request array for ourselves.
In addition to that, we need to establish a coding rule that struct
RelFileNode can't contain any padding bytes, since such structs are copied
into the request array verbatim. (There are other places that are assuming
this anyway, it turns out.)
In 9.1 and up, the risk was a bit larger because we were also effectively
assuming that struct RelFileNodeBackend contained no pad bytes, and with
fields of different types in there, that would be much easier to break.
However, there is no good reason to ever transmit fsync or delete requests
for temp files to the bgwriter/checkpointer, so we can revert the request
structs to plain RelFileNode, getting rid of the padding risk and saving
some marginal number of bytes and cycles in fsync queue manipulation while
we are at it. The savings might be more than marginal during deletion of
a temp relation, because the old code transmitted an entirely useless but
nonetheless expensive-to-process ForgetRelationFsync request to the
background process, and also had the background process perform the file
deletion even though that can safely be done immediately.
In addition, make some cleanup of nearby comments and small improvements to
the code in CompactCheckpointerRequestQueue/CompactBgwriterRequestQueue.
Peter Eisentraut [Tue, 17 Jul 2012 20:26:49 +0000 (23:26 +0300)]
PL/Python: Remove PLy_result_ass_item
It is apparently no longer used after the new slicing support was
implemented (
a97207b6908f1d4a7d19b37b818367bb0171039f), so let's
remove the dead code and see if anything cares.
Peter Eisentraut [Tue, 17 Jul 2012 18:34:22 +0000 (21:34 +0300)]
Show step titles in the pg_upgrade man page
The upstream XSLT stylesheets missed that case.
found by Álvaro Herrera
Alvaro Herrera [Tue, 17 Jul 2012 16:31:48 +0000 (12:31 -0400)]
Remove recently added PL/Perl encoding tests
These only pass cleanly on UTF8 and SQL_ASCII encodings, besides the
Japanese encoding in which they were originally written, which is clearly
not good enough. Since the functionality they test has not ever been
tested from PL/Perl, the best answer seems to be to remove the new tests
completely.
Per buildfarm results and ensuing discussion.
Tom Lane [Tue, 17 Jul 2012 14:14:06 +0000 (10:14 -0400)]
Put back storage/proc.h in postmaster.c.
I took this out thinking it wasn't needed anymore, but the EXEC_BACKEND
code still needs it. Per buildfarm.
Alvaro Herrera [Mon, 16 Jul 2012 22:43:21 +0000 (18:43 -0400)]
Introduce timeout handling framework
Management of timeouts was getting a little cumbersome; what we
originally had was more than enough back when we were only concerned
about deadlocks and query cancel; however, when we added timeouts for
standby processes, the code got considerably messier. Since there are
plans to add more complex timeouts, this seems a good time to introduce
a central timeout handling module.
External modules register their timeout handlers during process
initialization, and later enable and disable them as they see fit using
a simple API; timeout.c is in charge of keeping track of which timeouts
are in effect at any time, installing a common SIGALRM signal handler,
and calling setitimer() as appropriate to ensure timely firing of
external handlers.
timeout.c additionally supports pluggable modules to add their own
timeouts, though this capability isn't exercised anywhere yet.
Additionally, as of this commit, walsender processes are aware of
timeouts; we had a preexisting bug there that made those ignore SIGALRM,
thus being subject to unhandled deadlocks, particularly during the
authentication phase. This has already been fixed in back branches in
commit
0bf8eb2a, which see for more details.
Main author: Zoltán Böszörményi
Some review and cleanup by Álvaro Herrera
Extensive reworking by Tom Lane
Peter Eisentraut [Mon, 16 Jul 2012 19:15:03 +0000 (22:15 +0300)]
Remove unreachable code
The Solaris Studio compiler warns about these instances, unlike more
mainstream compilers such as gcc. But manual inspection showed that
the code is clearly not reachable, and we hope no worthy compiler will
complain about removing this code.
Peter Eisentraut [Mon, 16 Jul 2012 19:08:04 +0000 (22:08 +0300)]
Add comment why seemingly dead code is necessary