Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby
Дата
Msg-id 20140606164727.GU5146@eldon.alvh.no-ip.org
обсуждение исходный текст
Ответ на Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Ответы Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby  (Jeff Janes <jeff.janes@gmail.com>)
Список pgsql-bugs
Alvaro Herrera wrote:
> Serge Negodyuck wrote:
>
> > 2014-06-02 08:20:55 EEST 172.18.10.4 db PANIC: could not access status of
> > transaction 2080547
> > 2014-06-02 08:20:55 EEST 172.18.10.4 db DETAIL: Could not open file
> > "pg_multixact/members/14078": No such file or directory.
> > 2014-06-02 08:20:55 EEST 172.18.10.4 db CONTEXT: SQL statement "  UPDATE
> > ....."
>
> So as it turns out, this was caused because the arithmetic to handle the
> wraparound case neglected to handle multixacts with more members than
> the number that fit in the last page(s) of the last segment, leading to
> a number of pages in the 14078 segment (or whatever the last segment is
> for a given BLCKSZ) to fail to be initialized.  This patch is a rework
> of that arithmetic, although it seems little bit too obscure.

After some simplification I think it should be clearer.  Thanks Andres
for commenting offlist.

There is a different way to compute the "difference" proposed by Andres,
without using if/else; the idea is to cast the values to int64 and then
clamp.  It would be something like

    uint64    diff64;

    diff64 = Min((uint64) offset + nmembers,
            (uint64) offset + MULTIXACT_MEMBERS_PER_PAGE);
    difference = (uint32) Min(diff64, MaxMultiXactOffset);

(There are other ways to formulate this, of course, but this seems to me
to be the most readable one).  I am undecided between this and the one I
propose in the patch, so I've stuck with the patch.

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Вложения

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

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: BUG #10542: infinite loop in index.c when trying to reindex system tables (probably corrupted db state)
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #8673: Could not open file "pg_multixact/members/xxxx" on slave during hot_standby