pgsql: Fix WAL format incompatibility introduced by backpatching of 52a

From: Alexander Korotkov <akorotkov(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix WAL format incompatibility introduced by backpatching of 52a
Date: 2019-03-24 13:34:49
Message-ID: E1h83Gz-0003U7-6j@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix WAL format incompatibility introduced by backpatching of 52ac6cd2d0

52ac6cd2d0 added new field to ginxlogDeletePage and was backpatched to 9.4.
That led to problems when patched postgres instance applies WAL records
generated by non-patched one. WAL records generated by non-patched instance
don't contain new field, which patched one is expecting to see.

Thankfully, we can distinguish patched and non-patched WAL records by their data
size. If we see that WAL record is generated by non-patched instance, we skip
processing of new field. This commit comes with some assertions. In
particular, if it appears that on some platform struct data size didn't change
then static assertion will trigger.

Reported-by: Simon Riggs
Discussion: https://postgr.es/m/CANP8%2Bj%2BK4whxf7ET7%2BgO%2BG-baC3-WxqqH%3DnV4X2CgfEPA3Yu3g%40mail.gmail.com
Author: Alexander Korotkov
Reviewed-by: Simon Riggs, Alvaro Herrera
Backpatch-through: 9.4

Branch
------
REL9_4_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/d1166af192ed0bb40ed9dc53d4e799117403233b

Modified Files
--------------
src/backend/access/gin/ginxlog.c | 18 ++++++++++++++++++
src/include/access/gin_private.h | 14 ++++++++++++++
2 files changed, 32 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2019-03-24 15:32:04 Re: pgsql: Make heap TID a tiebreaker nbtree index column.
Previous Message Alexander Korotkov 2019-03-24 13:00:07 pgsql: Fix WAL format incompatibility introduced by backpatching of 52a