pgsql: Fix corrupt GIN_SEGMENT_ADDITEMS WAL records on big-endian hardw

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix corrupt GIN_SEGMENT_ADDITEMS WAL records on big-endian hardw
Дата
Msg-id E1bgEkg-0001io-EY@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix corrupt GIN_SEGMENT_ADDITEMS WAL records on big-endian hardware.

computeLeafRecompressWALData() tried to produce a uint16 WAL log field by
memcpy'ing the first two bytes of an int-sized variable.  That accidentally
works on little-endian hardware, but not at all on big-endian.  Replay then
thinks it's looking at an ADDITEMS action with zero entries, and reads the
first two bytes of the first TID therein as the next segno/action,
typically leading to "unexpected GIN leaf action" errors during replay.
Even if replay failed to crash, the resulting GIN index page would surely
be incorrect.  To fix, just declare the variable as uint16 instead.

Per bug #14295 from Spencer Thomason (much thanks to Spencer for turning
his problem into a self-contained test case).  This likely also explains
a previous report of the same symptom from Bernd Helmle.

Back-patch to 9.4 where the problem was introduced (by commit 14d02f0bb).

Discussion: <20160826072658.15676.7628@wrigleys.postgresql.org>
Possible-Report: <2DA7350F7296B2A142272901@eje.land.credativ.lan>

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/60893786d5180f5dd5aefd44d9cb6955d77b0473

Modified Files
--------------
src/backend/access/gin/gindatapage.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Simon Riggs
Дата:
Сообщение: pgsql: New recovery target recovery_target_lsn
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix corrupt GIN_SEGMENT_ADDITEMS WAL records on big-endian hardw