pgsql: Teach amcheck to verify sibling links in all cases.

From: Peter Geoghegan <pg(at)bowt(dot)ie>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Teach amcheck to verify sibling links in all cases.
Date: 2020-08-08 18:12:55
Message-ID: E1k4TKx-0004PJ-3n@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Teach amcheck to verify sibling links in all cases.

Teach contrib/amcheck's bt_index_check() function to check agreement
between siblings links. The left sibling's right link should point to a
right sibling page whose left link points back to the same original left
sibling. This extends a check that bt_index_parent_check() always
performed to bt_index_check().

This is the first time amcheck has been taught to perform buffer lock
coupling, which we have explicitly avoided up until now. The sibling
link check tends to catch a lot of real world index corruption with
little overhead, so it seems worth accepting the complexity. Note that
the new lock coupling logic would not work correctly on replica servers
without the changes made by commits 0a7d771f and 9a9db08a (there could
be false positives without those changes).

Author: Andrey Borodin, Peter Geoghegan
Discussion: https://postgr.es/m/0EB0CFA8-CBD8-4296-8049-A2C0F28FAE8C@yandex-team.ru

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/39132b784aeaaacf5ddfb5c35b6e29a6926f4345

Modified Files
--------------
contrib/amcheck/verify_nbtree.c | 173 ++++++++++++++++++++++++++++++++++------
1 file changed, 150 insertions(+), 23 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2020-08-08 21:26:41 pgsql: Remove <@ from contrib/intarray's GiST operator classes.
Previous Message Alvaro Herrera 2020-08-08 16:42:35 pgsql: walsnd: Don't set waiting_for_ping_response spuriously