pgsql: Don't ignore locktable-full failures in StandbyAcquireAccessExcl

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Don't ignore locktable-full failures in StandbyAcquireAccessExcl
Date: 2018-09-19 16:44:06
Message-ID: E1g2faA-0005Oa-0L@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Don't ignore locktable-full failures in StandbyAcquireAccessExclusiveLock.

Commit 37c54863c removed the code in StandbyAcquireAccessExclusiveLock
that checked the return value of LockAcquireExtended. That created a
bug, because it's still passing reportMemoryError = false to
LockAcquireExtended, meaning that LOCKACQUIRE_NOT_AVAIL will be returned
if we're out of shared memory for the lock table.

In such a situation, the startup process would believe it had acquired an
exclusive lock even though it hadn't, with potentially dire consequences.

To fix, just drop the use of reportMemoryError = false, which allows us
to simplify the call into a plain LockAcquire(). It's unclear that the
locktable-full situation arises often enough that it's worth having a
better recovery method than crash-and-restart. (I strongly suspect that
the only reason the code path existed at all was that it was relatively
simple to do in the pre-37c54863c implementation. But now it's not.)

LockAcquireExtended's reportMemoryError parameter is now dead code and
could be removed. I refrained from doing so, however, because there
was some interest in resurrecting the behavior if we do get reports of
locktable-full failures in the field. Also, it seems unwise to remove
the parameter concurrently with shipping commit f868a8143, which added a
parameter; if there are any third-party callers of LockAcquireExtended,
we want them to get a wrong-number-of-parameters compile error rather
than a possibly-silent misinterpretation of its last parameter.

Back-patch to 9.6 where the bug was introduced.

Discussion: https://postgr.es/m/6202.1536359835@sss.pgh.pa.us

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/265ac024572b639eb315eab1b68faf45bcc8f4f2

Modified Files
--------------
src/backend/storage/ipc/standby.c | 3 +--
src/backend/storage/lmgr/lock.c | 12 +++++++-----
2 files changed, 8 insertions(+), 7 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message pgsql 2018-09-19 17:25:28 pgsql: Tag refs/tags/REL_11_BETA4 was created
Previous Message Alexander Korotkov 2018-09-19 15:56:15 Re: pgsql: Add support for nearest-neighbor (KNN) searches to SP-GiST