Logical decoding timeline following fails to handle records split across segments

Поиск
Список
Период
Сортировка
От Craig Ringer
Тема Logical decoding timeline following fails to handle records split across segments
Дата
Msg-id CAMsr+YG_1FU_-L8QWSk6oKFT4Jt8dpORy2RHXDyMy0B5ZfkpGA@mail.gmail.com
обсуждение исходный текст
Ответы Re: Logical decoding timeline following fails to handle records split across segments  (Craig Ringer <craig@2ndquadrant.com>)
Re: Logical decoding timeline following fails to handle records split across segments  (Craig Ringer <craig@2ndquadrant.com>)
Список pgsql-hackers
Hi all

There's a bug (mine) in logical decoding timeline following where reading the first page from the segment containing a timeline switch fails to read from the most recent timeline in that segment. This is harmless if the old timeline's copy of the segment is present - but if it's been renamed to .partial, deleted or never copied over to a replica then decoding will complain that the required segment has already been removed. Just like without timeline following.

The underlying problem is that timeline calculations used the record's start pointer and didn't properly consider continuations; they were record-based, not page-based like they should be.

A corrected and handily much, much simpler patch is attached. The logic for finding the last timeline on a segment was massively more complex than it needed to be, and that wasn't the only thing.

--
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services
Вложения

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

Предыдущее
От: Masahiko Sawada
Дата:
Сообщение: Re: Reviewing freeze map code
Следующее
От: Tomas Vondra
Дата:
Сообщение: Re: pg9.6 segfault using simple query (related to use fk for join estimates)