pgsql: Check for interrupts inside the nbtree page deletion code.

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Check for interrupts inside the nbtree page deletion code.
Date: 2018-07-04 23:07:09
Message-ID: E1faqrd-0004mj-Eo@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Check for interrupts inside the nbtree page deletion code.

When deleting pages the nbtree code has to walk through siblings of a
tree node. When those sibling links are corrupted that can lead to
endless loops - which are currently not interruptible. This is
especially problematic if autovacuum is repeatedly blocked on such
indexes, as it can be hard to get out of that situation without
resorting to single user mode.

Thus add interrupt checks to appropriate places in such
loops. Unfortunately in one of the cases it's it's not easy to do so.

Between 9.3 and 9.4 the page deletion (and page split) code changed
significantly. Before it was significantly less robust against
interruptions. Therefore don't backpatch to 9.3.

Author: Andres Freund
Discussion: https://postgr.es/m/20180627191629.wkunw2qbibnvlz53@alap3.anarazel.de
Backpatch: 9.4-

Branch
------
REL9_4_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8c8c9f37c283292b0505c6337f96662ce6f5be2b

Modified Files
--------------
src/backend/access/nbtree/nbtpage.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2018-07-05 00:39:48 pgsql: Use context with correct lifetime in hypothetical_dense_rank_fin
Previous Message Andres Freund 2018-07-04 23:07:08 pgsql: Check for interrupts inside the nbtree page deletion code.