Re: BUG #15346: Replica fails to start after the crash
От | Alexander Kukushkin |
---|---|
Тема | Re: BUG #15346: Replica fails to start after the crash |
Дата | |
Msg-id | CAFh8B=nHdsX83hTZMqGqbht39ud+DRQOv4_Te+xu3DuPssQbZA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #15346: Replica fails to start after the crash (Alexander Kukushkin <cyberdemn@gmail.com>) |
Ответы |
Re: BUG #15346: Replica fails to start after the crash
|
Список | pgsql-bugs |
Hi, I think I am getting closer: If I start postgres without background worker, then works following code: // https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/nbtree/nbtxlog.c;h=c536e224321dbc46574aa76876b9d49fa4b5e9a4;hb=REL9_6_10#l549 if (CountDBBackends(InvalidOid) == 0) return latestRemovedXid; And it returns from the btree_xlog_delete_get_latestRemovedXid function. In case if we have a background worker, then CountDBBackends(InvalidOid) = 1 and as a result it aborts. Comment before if statement clearly tells about possible race condition: /* * If there's nothing running on the standby we don't need to derive a * full latestRemovedXid value, so use a fast path out of here. This * returns InvalidTransactionId, and so will conflict with all HS * transactions; but since we just worked out that that's zero people, * it's OK. * * XXX There is a race condition here, which is that a new backend might * start just after we look. If so, it cannot need to conflict, but this * coding will result in throwing a conflict anyway. */ Regards, -- Alexander Kukushkin
В списке pgsql-bugs по дате отправления: