diff options
author | Tom Lane | 2015-07-09 17:22:22 +0000 |
---|---|---|
committer | Tom Lane | 2015-07-09 17:22:22 +0000 |
commit | 45811be94e8539190b5e1a4f2cbdfef97fa391b5 (patch) | |
tree | fc145f0ea40459648ed20bb86f16a1f80401cc19 /contrib/btree_gist/expected | |
parent | 6ba365aa4621b0e4c4c0920cbdf56348875a46a2 (diff) |
Fix postmaster's handling of a startup-process crash.
Ordinarily, a failure (unexpected exit status) of the startup subprocess
should be considered fatal, so the postmaster should just close up shop
and quit. However, if we sent the startup process a SIGQUIT or SIGKILL
signal, the failure is hardly "unexpected", and we should attempt restart;
this is necessary for recovery from ordinary backend crashes in hot-standby
scenarios. I attempted to implement the latter rule with a two-line patch
in commit 442231d7f71764b8c628044e7ce2225f9aa43b67, but it now emerges that
that patch was a few bricks shy of a load: it failed to distinguish the
case of a signaled startup process from the case where the new startup
process crashes before reaching database consistency. That resulted in
infinitely respawning a new startup process only to have it crash again.
To handle this properly, we really must track whether we have sent the
*current* startup process a kill signal. Rather than add yet another
ad-hoc boolean to the postmaster's state, I chose to unify this with the
existing RecoveryError flag into an enum tracking the startup process's
state. That seems more consistent with the postmaster's general state
machine design.
Back-patch to 9.0, like the previous patch.
Diffstat (limited to 'contrib/btree_gist/expected')
0 files changed, 0 insertions, 0 deletions